Sobre el funcionamiento básico del documento
Operación básica
agregando datos
PUT /latte2/user/1
{
"name":"latte",
"age": 23,
"desc": "干",
"tags":["技术","海贼王"]
}
PUT /latte2/user/2
{
"name": "张三",
"age": 28,
"desc": "法外狂徒",
"tags": ["旅游", "渣男", "交友"]
}
PUT /latte2/user/3
{
"name": "李四",
"age": 30,
"desc": "不知道怎么描述",
"tags": ["旅游", "男", "唱歌"]
}
GET latte2/user/1
GET latte2/user/_search?q=name:latte
Obtener datos OBTENER
Actualizar datos PUT
Si los campos de colocación están incompletos, los campos originales se descartarán y la colocación es una operación de sobrescritura.
Publicar _update, se recomienda este método de actualización.
Use POST sin agregar _update
Los demás campos que no se hayan enviado se dejarán en blanco y luego se agregará un nuevo campo de nombre de documento.
Utilice POST seguido de _update
El valor del campo enviado se ha actualizado y el campo no enviado todavía tiene el valor original.
Simplemente busque
GET latte2/user/1
¡La consulta condicional de respuesta corta puede generar una consulta básica de acuerdo con las reglas de mapeo predeterminadas!
Pesos
Búsqueda de operaciones complejas
seleccionar (ordenar, paginar, resaltar, consulta difusa, consulta precisa!)
# 模糊查询
GET latte2/user/_search
{
"query": {
"match": {
"name": "latte2"
}
}
}
# 对查询结果进行字段过滤
GET latte2/user/_search
{
"query": {
"match": {
"name": "latte2"
}
},
"_source": ["name", "desc"]
}
# 排序
GET latte2/user/_search
{
"query": {
"match": {
"name": "latte2"
}
},
"sort":[{
"age": "asc"
}]
}
第二种写法
GET latte2/user/_search
{
"query": {
"match": {
"name": "latte2"
}
},
"sort": [
{
"age": {
"order": "asc"
}
}
]
}
# 分页
GET latte2/user/_search
{
"query": {
"match": {
"name": "latte2"
}
},
"sort":[{
"age": "asc"
}],
"from": 0,
"size": 2
}
hit de estructura json : índice e información del documento. El número total de consultas, y luego los documentos específicos que se consultan. Se puede recorrer todo en los datos. Puntaje: Podemos juzgar quién está más en línea con el resultado.
Resultados de salida, ¡no quiero tanto!
Después de usar Java para operar, ¡todos los métodos y objetos son las claves internas!
¡Clasificar!
Consulta de paginación!
El subíndice de datos todavía comienza desde 0, que es lo mismo que todas las estructuras de datos aprendidas.
/ search / {current} / {pageize}
Consulta booleana
# 多条件查询 must 相当于and
GET latte2/user/_search
{
"query": {
"bool": {
"must": [
{"match": {
"name": "latte2"
}},
{"match": {
"age": 23
}}
]
}
}
}
# 多条件查询 should 相当于or
GET latte2/user/_search
{
"query": {
"bool": {
"should": [
{"match": {
"name": "latte2"
}},
{"match": {
"age": 25
}}
]
}
}
}
# 多条件查询 must_not 相当于 not
GET latte2/user/_search
{
"query": {
"bool": {
"must_not": [
{"match": {
"age": 25
}}
]
}
}
}
# 过滤查询1 age > 27
GET latte2/user/_search
{
"query": {
"bool": {
"must": [
{"match": {
"name": "latte2"
}}
],
"filter": [
{"range": {
"age": {
"gt": 27
}
}}
]
}
}
}
# 过滤器2 22<age<30
GET latte2/user/_search
{
"query": {
"bool": {
"must": [
{"match": {
"name": "latte2"
}}
],
"filter": [
{"range": {
"age": {
"lt": 30,
"gt": 22
}
}}
]
}
}
}
GET latte2/user/_search
{
"query": {
"match": {
"tags": "技术 男"
}
}
}
must (y) , todas las condiciones deben cumplir donde id = 1 y name = xxx
debería (o) , todas las condiciones deben cumplir donde id = 1 o nombre = xxx
must_not (not)
Filtrar
- gt es mayor que
- gte es mayor o igual que
- es menos que
- lte es menor o igual que!
¡Combina múltiples condiciones!
Consulta precisa!
# 定义类型term: 精确匹配
PUT latte3
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"desc": {
"type": "keyword"
}
}
}
}
PUT /latte3/_doc/1
{
"name":"latte3",
"desc":"latte3 desc"
}
PUT /latte3/_doc/2
{
"name":"latte3",
"desc":"desc 2"
}
# 按照keyword类型精准匹配
GET latte3/_search
{
"query": {
"term": {
"desc": {
"value": "desc 2"
}
}
}
}
# 结果:
{
"took" : 174,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.6931471,
"hits" : [
{
"_index" : "latte3",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.6931471,
"_source" : {
"name" : "latte3",
"desc" : "desc 2"
}
}
]
}
}
# 按照text类型匹配
GET latte3/_search
{
"query": {
"term": {
"name":"latte3"
}
}
# 结果:
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 0.18232156,
"hits" : [
{
"_index" : "latte3",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.18232156,
"_source" : {
"name" : "latte3",
"desc" : "latte3 desc"
}
},
{
"_index" : "latte3",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.18232156,
"_source" : {
"name" : "latte3",
"desc" : "desc 2"
}
}
]
}
}
多个值匹配精确查询
PUT /latte3/_doc/3
{
"t1":"22",
"t2":"2021-03-13"
}
PUT /latte3/_doc/4
{
"t1": "33",
"t2": "2021-03-13"
}
GET /latte3/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"t1": "22"
}
},{
"term": {
"t1": "33"
}
}
]
}
}
}
高亮
GET latte2/user/_search
{
"query": {
"match": {
"name": "latte2"
}
},
"highlight": {
"pre_tags": "<p class='key' style='color:red'>",
"post_tags": "</p>",
"fields": {
"name": {}
}
}
}
# 结果显示:
#! Deprecation: [types removal] Specifying types in search requests is deprecated.
{
"took" : 148,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 0.8405091,
"hits" : [
{
"_index" : "latte2",
"_type" : "user",
"_id" : "1",
"_score" : 0.8405091,
"_source" : {
"doc" : {
"name" : "latte2"
},
"name" : "latte2"
},
"highlight" : {
"name" : [
"<p class='key' style='color:red'>latte2</p>"
]
}
},
{
"_index" : "latte2",
"_type" : "user",
"_id" : "2",
"_score" : 0.8405091,
"_source" : {
"name" : "latte2",
"age" : 28,
"desc" : "法外狂徒",
"tags" : [
"旅游",
"渣男",
"交友"
]
},
"highlight" : {
"name" : [
"<p class='key' style='color:red'>latte2</p>"
]
}
}
]
}
}
El término consulta se busca directamente a través del proceso de término especificado por el índice invertido.
Sobre el participio:
- término, consulta directamente el exacto
- match, usará el tokenizador para analizar! (¡Analice el documento primero y luego consulte el documento analizado!)
Dos tipos text
keyword
(el tipo de texto se segmentará, el tipo de palabra clave no se segmentará)
Varios valores coinciden con la consulta exacta
Resaltar consulta!