Operaciones básicas de Elasticsearch - Operaciones RESTful

1. Introducción a RESTful

REST se refiere a un conjunto de restricciones y principios arquitectónicos. Una aplicación o diseño que satisface estas restricciones y principios es RESTful. El principio REST más importante para las aplicaciones web es que la interacción entre el cliente y el servidor no tiene estado entre las solicitudes. Cada solicitud de cliente a servidor debe contener la información necesaria para comprender la solicitud. Si el servidor se reinicia en cualquier momento entre solicitudes, no se notificará al cliente. Además, las solicitudes sin estado pueden ser respondidas por cualquier servidor disponible, lo cual es ideal para entornos como la computación en la nube. Los clientes pueden almacenar datos en caché para mejorar el rendimiento.

En el lado del servidor, el estado y la funcionalidad de la aplicación se pueden agrupar en varios recursos. Un recurso es una entidad conceptual interesante que se expone a los clientes. Ejemplos de recursos son: objetos de aplicación, registros de bases de datos, algoritmos, etc. Cada recurso utiliza URI (Universal Resource Identifier) ​​para obtener una dirección única. Todos los recursos comparten una interfaz uniforme para transferir el estado entre el cliente y el servidor. Se utilizan métodos HTTP estándar, como GET, PUT, POST y DELETE.

En los servicios web RESTful, cada recurso tiene una dirección. Los propios recursos son todos los objetivos de las llamadas a métodos y la lista de métodos es la misma para todos los recursos. Estos métodos son estándar e incluyen HTTP GET, POST, PUT, DELETE y posiblemente HEAD y OPTIONS. El entendimiento simple es que si desea acceder a los recursos en Internet, debe enviar una solicitud al servidor donde se encuentra el recurso, y el cuerpo de la solicitud debe incluir la ruta de red del recurso y las operaciones en el recurso (adición, eliminación, modificación y consulta).

2. Instalación del cliente

Si envía una solicitud al servidor de Elasticsearch directamente a través del navegador, debe incluir el método estándar HTTP en la solicitud enviada, y la mayoría de las funciones de HTTP solo admiten los métodos GET y POST. Por lo tanto, para facilitar el acceso de los clientes, puede usar Postman (no es compatible con chino pero relativamente mucha gente lo usa), Apipost (hecho en chino), Apifox (hecho en chino) y otras herramientas de depuración de api.

Cartero: https://www.postman.com/downloads/

Apipost: https://www.apipost.cn//

Apifox: https://www.apifox.cn/

Postman: una herramienta de depuración de páginas web anticuada y poderosa, con una interfaz simple y clara, operación conveniente y rápida, y un diseño muy fácil de usar. Pero no admite chino, y el paquete de idioma chino para chinos también se detiene en la versión 9.12.2 https://github.com/hlmd/postman-cn

Apipost&Apifox: Es hecho por chinos, soporta chino y la versión personal es gratuita, básicamente tienen lo que tiene Postman, también soportan colaboración, soportan versión web, exportan varios documentos y generan códigos en varios idiomas. La razón principal es que el servidor está en China y su espacio de trabajo se puede sincronizar con el extremo remoto. Sin embargo, el servidor del cartero está en el extranjero y la velocidad de acceso es muy lenta. Trate de no registrarse e iniciar sesión, de lo contrario será muy atascado.

3. Formato de datos

Elasticsearch es una base de datos orientada a documentos, donde un dato es un documento.
Se hace una analogía entre el concepto de almacenamiento de datos de documentos en Elasticsearch y el concepto de almacenamiento de datos en la base de datos relacional MySQL.
inserte la descripción de la imagen aquí
Index en ES se puede considerar como una biblioteca, mientras que Types es equivalente a una tabla y Documents es equivalente a una fila de una mesa. Aquí, el concepto de Tipos se ha debilitado gradualmente. En Elasticsearch 6.X, un índice solo puede contener un tipo. En Elasticsearch 7.X, el concepto de Tipo se ha eliminado.

6 Utilice JSON como formato de serialización de documentos, como una parte de la información del usuario:

{
    
    
	"name" : "John",
	"sex" : "Male",
	"age" : 25,
	"birthDate": "1990/05/01",
	"about" : "I love to go rock climbing",
	"interests": [ "sports", "music" ]
}

4. Operación HTTP

4.1 Operación de índice

crear índice

En comparación con las bases de datos relacionales, crear un índice es equivalente a crear una base de datos
Envíe una solicitud PUT al servidor ES: http://127.0.0.1:9200/shopping
inserte la descripción de la imagen aquí

{
    
    
	"acknowledged"【响应结果】: true, # true 操作成功
	"shards_acknowledged"【分片结果】: true, # 分片操作成功
	"index"【索引名称】: "shopping"
}
# 注意:创建索引库的分片数默认 1 片,在 7.0.0 之前的 Elasticsearch 版本中,默认 5

Si el índice se agrega repetidamente, se devolverá un mensaje de error.
inserte la descripción de la imagen aquí

ver un solo índice

Solicitud GET: http://127.0.0.1:9200/shopping
inserte la descripción de la imagen aquí
para ver el índice La ruta de la solicitud enviada al servidor ES es coherente con la creación del índice. Pero los métodos HTTP son inconsistentes. Aquí
puede experimentar el significado de RESTful
Después de la solicitud, el servidor responde de la siguiente manera:

{
    
    
	"shopping"【索引名】: {
    
    
		"aliases"【别名】: {
    
    },
		"mappings"【映射】: {
    
    },
		"settings"【设置】: {
    
    
			"index"【设置 - 索引】: {
    
    
				"creation_date"【设置 - 索引 - 创建时间】: "1614265373911",
				"number_of_shards"【设置 - 索引 - 主分片数量】: "1",
				"number_of_replicas"【设置 - 索引 - 副分片数量】: "1",
				"uuid"【设置 - 索引 - 唯一标识】:"eI5wemRERTumxGCc1bAk2A",
				"version"【设置 - 索引 - 版本】: {
    
    
					"created": "7080099"
				},
				"provided_name"【设置 - 索引 - 名称】: "shopping"
			}
		}
	}
}

ver todos los índices

Solicitud GET: http://127.0.0.1:9200/_cat/indices?v
inserte la descripción de la imagen aquí
El _cat en la ruta de solicitud aquí significa visualización, e índices significa índice, por lo que el significado general es ver todos los índices en el servidor ES actual, al igual que MySQL La sensación de mostrar tablas en los resultados de respuesta del servidor es la siguiente:

Encabezamiento significado
salud Estado de salud actual del servidor:
verde (grupo completo) amarillo (punto único normal, grupo incompleto) rojo (punto único anormal)
estado Índice abierto, estado cerrado
índice nombre de índice
uuid índice de número uniforme
en Número de fragmentos primarios
reps número de copias
docs.count Número de documentos disponibles
docs.borrado Estado de eliminación del documento (tombstone)
tienda.tamaño El tamaño total de los fragmentos primarios y secundarios.
pri.store.size El espacio ocupado por el fragmento principal.

eliminar índice

Solicitud DELETE: http://127.0.0.1:9200/shopping
inserte la descripción de la imagen aquí
Al volver a visitar el índice, el servidor devuelve una respuesta: El índice no existe
inserte la descripción de la imagen aquí

4.2 Operación de documentos

crear documento

Los documentos aquí se pueden comparar con datos de tablas en una base de datos relacional, y el formato de datos agregado está en formato JSON.
Solicitud POST: http://127.0.0.1:9200/shopping/_doc
El contenido del cuerpo de la solicitud es: (el cuerpo de la solicitud debe existir; de lo contrario, se devolverá un mensaje de error)

{
    
    
	"title":"小米手机",
	"category":"小米",
	"images":"http://www.gulixueyuan.com/xm.jpg",
	"price":3999.00
}

El método para enviar la solicitud aquí debe ser POST, no PUT, de lo contrario, se producirá un error 405 similar:
inserte la descripción de la imagen aquí

Como encontré algunos problemas con la versión Apipost6.x durante mi estudio, cambié a la versión 5.x. La interfaz puede diferir de la captura de pantalla anterior.
La causa del problema es que la versión Apipost6.x redirigirá el código de respuesta 201, haciendo que el servidor ES reciba una solicitud Get. El mensaje de error se muestra arriba. Se ha informado al oficial y se corregirá en versiones posteriores.
La producción nacional todavía necesita seguir trabajando duro.

Los resultados normales de la respuesta del servidor son los siguientes:
inserte la descripción de la imagen aquí

{
    
    
	"_index"【索引】: "shopping",
	"_type"【 类型-文档 】: "_doc",
	"_id"【唯一标识】: "w_WoYoIBNKuSN7cz5FHR", #可以类比为 MySQL 中的主键,随机生成
	"_version"【版本】: 1,
	"result"【结果】: "created", #这里的 created 表示创建成功
	"_shards"【分片】: {
    
    
		"total"【分片 - 总数】: 2,
		"successful"【分片 - 成功】: 1,
		"failed"【分片 - 失败】: 0
	},
	"_seq_no": 0,
	"_primary_term": 1
}

Después de crear los datos anteriores, dado que no se especifica ningún identificador único (ID) de datos, el servidor ES generará uno aleatoriamente de forma predeterminada.
Si desea personalizar el identificador único, debe especificarlo al crear: http://127.0.0.1:9200/shopping/_doc/1 Nota
inserte la descripción de la imagen aquí
aquí: si especifica la clave principal de datos al agregar datos, entonces el método de solicitud también se puede PONER

ver un solo documento

Al ver un documento, debe especificar el identificador único del documento, similar a la consulta de datos de clave principal en MySQL

OBTENER solicitud: http://127.0.0.1:9200/shopping/_doc/1
inserte la descripción de la imagen aquí

{
    
    
	"_index"【索引】: "shopping",
	"_type"【文档类型】: "_doc",
	"_id": "1",
	"_version": 2,
	"_seq_no": 2,
	"_primary_term": 2,
	"found"【查询结果】: true, # true 表示查找到,false 表示未查找到
	"_source"【文档源信息】: {
    
    
		"title": "华为手机",
		"category": "华为",
		"images": "http://www.gulixueyuan.com/hw.jpg",
		"price": 4999.00
	}
}

Modificar el documento (revisión completa)

Al igual que agregar un nuevo documento, ingrese la misma solicitud de dirección URL, si el cuerpo de la solicitud cambia, el contenido de datos original se sobrescribirá.
Solicitud POST/PUT: http://127.0.0.1:9200/shopping/_doc/1

{
    
    
	"title":"小米手机",
	"category":"小米",
	"images":"http://www.gulixueyuan.com/xm.jpg",
	"price":2999.00
}

inserte la descripción de la imagen aquí

{
    
    
	"_index": "shopping",
	"_type": "_doc",
	"_id": "1",
	"_version"【版本】: 2,
	"result"【结果】: "updated", # updated 表示数据被更新
	"_shards": {
    
    
		"total": 2,
		"successful": 1,
		"failed": 0
		},
	"_seq_no": 2,
	"_primary_term": 2
}

Modificar campo (modificación local)

Al modificar datos, también puede modificar solo la información parcial de una determinada
solicitud POST de datos: http://127.0.0.1:9200/shopping/_update/1
El contenido del cuerpo de la solicitud es:

{
    
    
	"doc": {
    
    
		"price":3000.00
	}
}

inserte la descripción de la imagen aquí
De acuerdo con la identificación única, consulte los datos del documento, los datos del documento se han actualizado
inserte la descripción de la imagen aquí

eliminar documento

La eliminación de un documento no se elimina inmediatamente del disco, simplemente se marca como eliminado (tombstone).

ELIMINAR solicitud: http://127.0.0.1:9200/shopping/_doc/1
inserte la descripción de la imagen aquí

{
    
    
	"_index": "shopping",
	"_type": "_doc",
	"_id": "1",
	"_version"【版本】: 4, #对数据的操作,都会更新版本
	"result"【结果】: "deleted", # deleted 表示数据被标记为删除
	"_shards": {
    
    
		"total": 2,
		"successful": 1,
		"failed": 0
	},
	"_seq_no": 4,
	"_primary_term": 2
}

Después de eliminar, consulte la información del documento actual
inserte la descripción de la imagen aquí
Si elimina un documento que no existe
inserte la descripción de la imagen aquí

{
    
    
	"_index": "shopping",
	"_type": "_doc",
	"_id": "1",
	"_version": 1,
	"result"【结果】: "not_found", # not_found 表示未查找到
	"_shards": {
    
    
		"total": 2,
		"successful": 1,
		"failed": 0
	},
	"_seq_no": 5,
	"_primary_term": 2
}

Eliminar documentos condicionalmente

Por lo general, los datos se eliminan de acuerdo con el identificador único del documento. En la operación real, también se pueden eliminar varios datos de acuerdo con las condiciones.

  1. Primero agregue múltiples piezas de datos respectivamente:
{
    
    
	"title": "小米手机",
	"category": "小米",
	"images": "http://www.gulixueyuan.com/xm.jpg",
	"price": 4000
}

{
    
    
	"title":"华为手机",
	"category":"华为",
	"images":"http://www.gulixueyuan.com/hw.jpg",
	"price":4000.00
}

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Solicitud POST : http://127.0.0.1:9200/shopping/_delete_by_query
El contenido del cuerpo de la solicitud es:

{
    
    
	"query":{
    
    
		"match":{
    
    
			"price":4000.00
		}
	}
}

inserte la descripción de la imagen aquí

{
    
    
	"took"【耗时】: 6,
	"timed_out"【是否超时】: false,
	"total"【总数】: 1,
	"deleted"【删除数量】: 1,
	"batches": 1,
	"version_conflicts": 0,
	"noops": 0,
	"retries": {
    
    
		"bulk": 0,
		"search": 0
	},
	"throttled_millis": 0,
	"requests_per_second": -1,
	"throttled_until_millis": 0,
	"failures": []
}

4.3 Operación de mapeo

Con la biblioteca de índices, es equivalente a tener una base de datos en la base de datos.

A continuación, debe crear la asignación en la biblioteca de índices (índice), que es similar a la estructura de la tabla (tabla) en la base de datos (base de datos). Para crear una tabla de base de datos, debe establecer el nombre del campo, el tipo, la longitud, las restricciones, etc.; lo mismo se aplica a la biblioteca de índices, debe saber qué campos están bajo este tipo y qué información de restricción tiene cada campo. Esto se llama mapeo.

crear mapeo

  • Cree una
    solicitud PUT de índice de estudiante: http://127.0.0.1:9200/student
  • Cree una
    solicitud PUT de mapeo: http://127.0.0.1:9200/student/_mapping
    inserte la descripción de la imagen aquí
    descripción de datos de mapeo:
  • Nombre del campo: complete libremente, especifique muchos atributos a continuación, por ejemplo: título, subtítulo, imágenes, precio
  • tipo: tipo, los tipos de datos admitidos en Elasticsearch son muy ricos, por ejemplo, algunos de los más importantes:
    • El tipo String se divide en dos tipos:
      • texto: palabras separables
      • palabra clave: Indivisible, los datos se compararán como un campo completo
    • Numérico: tipo numérico, dividido en dos categorías
      • Tipos de datos básicos: long, integer, short, byte, double, float, half_float
      • Tipo de alta precisión de números de punto flotante: scaled_float
    • Fecha: tipo de fecha
    • Matriz: tipo de matriz
    • Objeto Objeto
  • index: Si indexar, el valor predeterminado es verdadero, es decir, todos los campos se indexarán sin ninguna configuración.
    • verdadero: el campo se indexará y se puede usar para buscar
    • falso: el campo no se indexará y no se podrá utilizar para realizar búsquedas
  • almacenar: si se almacenan los datos de forma independiente, el valor predeterminado es falso,
    el texto original se almacenará en _source, de manera predeterminada, otros campos extraídos no se almacenan de forma independiente, sino que se extraen de _source. Por supuesto, también puede almacenar un determinado campo de forma independiente, siempre que establezca "almacenar": verdadero. Obtener un campo almacenado de forma independiente es mucho más rápido que analizar desde _source, pero también ocupará más espacio, por lo que debe basarse en la situación real que el negocio necesita establecer.
  • analizador: separador de palabras, el ik_max_word aquí es para usar el separador de palabras ik, habrá un capítulo especial para aprender más adelante

ver el mapa

OBTENER solicitud: http://127.0.0.1:9200/student/_mapping
inserte la descripción de la imagen aquí

Asociación de mapa índice

PUT solicitud: http://127.0.0.1:9200/student1

{
    
    
	"settings": {
    
    },
	"mappings": {
    
    
		"properties": {
    
    
			"name": {
    
    
				"type": "text",
				"index": true
			},
			"sex": {
    
    
				"type": "text",
				"index": false
			},
			"age": {
    
    
				"type": "long",
				"index": false
			}
		}
	}
}

Equivalente a mapeo y asociación al crear un índice
inserte la descripción de la imagen aquí

4.4 Consulta avanzada

Elasticsearch proporciona un DSL de consulta completo basado en JSON para definir consultas
y definir datos:

# POST /student/_doc/1001
{
    
    
	"name":"zhangsan",
	"nickname":"zhangsan",
	"sex":"男",
	"age":30
}
# POST /student/_doc/1002
{
    
    
	"name":"lisi",
	"nickname":"lisi",
	"sex":"男",
	"age":20
}
# POST /student/_doc/1003
{
    
    
	"name":"wangwu",
	"nickname":"wangwu",
	"sex":"女",
	"age":40
}
# POST /student/_doc/1004
{
    
    
	"name":"zhangsan1",
	"nickname":"zhangsan1",
	"sex":"女",
	"age":50
}
# POST /student/_doc/1005
{
    
    
	"name":"zhangsan2",
	"nickname":"zhangsan2",
	"sex":"女",
	"age":30
}

Ver todos los documentos en la biblioteca de índice

Solicitud GET/POST: http://127.0.0.1:9200/_search
inserte la descripción de la imagen aquí

Ver todos los documentos bajo el índice especificado

Solicitud GET/POST: http://127.0.0.1:9200/student/_search
inserte la descripción de la imagen aquí

{
    
    
	"took"【查询花费时间,单位毫秒】: 1,
	"timed_out"【是否超时】: false,
	"_shards"【分片信息】: {
    
    
		"total"【总数】: 1,
		"successful"【成功】: 1,
		"skipped"【忽略】: 0,
		"failed"【失败】: 0
	},
	"hits"【搜索命中结果】: {
    
    
		"total"【搜索条件匹配的文档总数】: {
    
    
			"value"【总命中计数的值】: 5,
			"relation"【计数规则】: "eq" # eq 表示计数准确, gte 表示计数不准确
		},
		"max_score"【匹配度分值】: 1,
		"hits"【命中结果集合】: [
			... ...
		]
	}
}

consulta de concordancia de condiciones

  1. Consulta de parámetros de empalme de ruta (recomendado el segundo)

Solicitud GET/POST: http://127.0.0.1:9200/student/_search?q=name:zhangsan

parámetro ilustrar
? Código para agregar parámetros de consulta
q Indica el significado de la consulta.
nombre nombre del campo de consulta

inserte la descripción de la imagen aquí

  1. El cuerpo de la solicitud contiene una consulta de parámetros (recomendado)

consulta de tipo de coincidencia de coincidencia, la condición de consulta se dividirá en palabras, y luego se realizará la consulta, y la relación entre múltiples entradas es o

Solicitud GET/POST: http://127.0.0.1:9200/shopping/_search
El contenido del cuerpo de la solicitud es:

{
    
    
    "query": {
    
    
        "match":{
    
    
            "name":"zhangsan"
        }
    }
}

inserte la descripción de la imagen aquí

consulta de coincidencia de campo

multi_match es similar a match, excepto que se puede consultar en varios campos.

OBTENER solicitud: http://127.0.0.1:9200/student/_search

{
    
    
	"query": {
    
    
		"multi_match": {
    
    
			"query": "zhangsan",
			"fields": ["name","nickname"]
		}
	}
}

inserte la descripción de la imagen aquí

consulta exacta de palabra clave

consulta de términos, consulta de concordancia exacta de palabras clave, sin segmentación de palabras para las condiciones de consulta.

OBTENER solicitud: http://127.0.0.1:9200/student/_search

{
    
    
	"query": {
    
    
		"term": {
    
    
			"name": {
    
    
				"value": "zhangsan"
			}
		}
	}
}

inserte la descripción de la imagen aquí

Consulta precisa de varias palabras clave

La consulta de términos es la misma que la consulta de términos, pero le permite especificar varios valores con los que comparar.
Si este campo contiene alguno de los valores especificados, entonces el documento cumple con las condiciones, similar a la de mysql.

OBTENER solicitud: http://127.0.0.1:9200/student/_search

{
    
    
	"query": {
    
    
		"terms": {
    
    
			"name": ["zhangsan","lisi"]
		}
	}
}

inserte la descripción de la imagen aquí

especificar campos de consulta

De forma predeterminada, Elasticsearch devolverá todos los campos del documento almacenado en _source en los resultados de búsqueda.
Si solo queremos obtener algunos de los campos, podemos agregar el filtrado _source

OBTENER solicitud: http://127.0.0.1:9200/student/_search

{
    
    
	"_source": ["name","nickname"],
	"query": {
    
    
		"terms": {
    
    
			"nickname": ["zhangsan"]
		}
	}
}

inserte la descripción de la imagen aquí

campo de filtro

También podemos pasar:

  • incluye: para especificar los campos que desea mostrar
  • excluye: para especificar los campos que no se quieren mostrar

OBTENER solicitud: http://127.0.0.1:9200/student/_search

{
    
    
	"_source": {
    
    
		"includes": ["name","sex"],
		"excludes": ["nickname"]
	},
	"query": {
    
    
		"terms": {
    
    
			"nickname": ["zhangsan"]
		}
	}
}

inserte la descripción de la imagen aquí

Consulta compuesta

boolCombine varias otras consultas por must(debe), must_not(no debe), should(debería)

OBTENER solicitud: http://127.0.0.1:9200/student/_search

{
    
    
	"query": {
    
    
		"bool": {
    
    
			"must": [
				{
    
    
					"match": {
    
    
						"name": "zhangsan"
					}
				}
			],
			"must_not": [
				{
    
    
					"match": {
    
    
						"age": "40"
					}
				}
			],
			"should": [
				{
    
    
					"match": {
    
    
						"sex": "男"
					}
				}
			]
		}
	}
}

Descripción del error:
la edad no se puede indexar en el mapeo y no se puede ver. (También se encontrarán las siguientes consultas de rango)

Esto se debe a que el índice de edad y sexo se establece en falso al crear el mapeo de índice, la siguiente es la captura de pantalla del error.
Si desea realizar una prueba, se recomienda reconstruir un índice y luego establecer el índice de la edad y el sexo de la asociación de mapeo en verdadero. El
inserte la descripción de la imagen aquí
resultado normal de retorno debe ser:
inserte la descripción de la imagen aquí

consulta de rango

La consulta de rango encuentra números u horas que se encuentran dentro de un rango específico. las consultas de rango permiten los siguientes caracteres

operador ilustrar
gt mayor que>
gte mayor o igual que >=
es menos que<
lte menor o igual que <=

OBTENER solicitud: http://127.0.0.1:9200/student/_search

{
    
    
	"query": {
    
    
		"range": {
    
    
			"age": {
    
    
				"gte": 30,
				"lte": 35
			}
		}
	}
}

inserte la descripción de la imagen aquí

consulta difusa

Devuelve documentos que contienen términos similares al término de búsqueda.
La distancia de edición es el número de cambios de un carácter necesarios para convertir un término en otro. Estos cambios pueden incluir:

  • cambiar de personaje (caja → zorro)
  • borrar carácter (negro → falta)
  • insertar carácter (sic → enfermo)
  • transponer dos personajes adyacentes (act → cat)

Para encontrar términos similares, una consulta aproximada crea un conjunto de todas las variaciones o expansiones posibles de un término de búsqueda dentro de una distancia de edición especificada. Luego, la consulta devuelve una coincidencia exacta para cada extensión.

Modificar la distancia de edición por borrosidad. Generalmente se usa el valor predeterminado de AUTO, y la distancia de edición se genera de acuerdo con la duración del término.

OBTENER solicitud: http://127.0.0.1:9200/student/_search

{
    
    
	"query": {
    
    
		"fuzzy": {
    
    
			"name": {
    
    
				"value": "zhangsan"
			}
		}
	}
}

inserte la descripción de la imagen aquí
OBTENER solicitud: http://127.0.0.1:9200/student/_search

{
    
    
   "query": {
    
    
   	"fuzzy": {
    
    
   		"name": {
    
    
   			"value": "zhangsan",
   			"fuzziness": 2
   		}
   	}
   }
}

inserte la descripción de la imagen aquí

Clasificación de un solo campo

sort nos permite ordenar por diferentes campos y especificar el método de clasificación a través de order. desc orden descendente, asc orden ascendente.

OBTENER solicitud: http://127.0.0.1:9200/student/_search

{
    
    
	"query": {
    
    
		"match": {
    
    
			"name": "zhangsan"
		}
	},
	"sort": [
		{
    
    
			"age": {
    
    
				"order": "desc"
			}
		}
	]
}

inserte la descripción de la imagen aquí

Clasificación de campos múltiples

Supongamos que queremos consultar con edad y _puntuación juntas, y las coincidencias se ordenan primero por edad y luego por puntuación de relevancia.

OBTENER solicitud: http://127.0.0.1:9200/student/_search

{
    
    
	"query": {
    
    
		"match_all": {
    
    }
	},
	"sort": [
		{
    
    
			"age": {
    
    
				"order": "desc"
			}
		},
		{
    
    
			"_score": {
    
    
				"order": "desc"
			}
		}
	]
}

inserte la descripción de la imagen aquí

resaltar consulta

Al realizar una búsqueda de palabras clave, las palabras clave en el contenido buscado se mostrarán en diferentes colores, lo que se denomina resaltado.

Elasticsearch puede establecer la etiqueta y el estilo (resaltado) de la parte de la palabra clave en el contenido de la consulta.
Mientras usa la consulta de coincidencia, agregue un atributo destacado:

  • pre_tags: pre-etiqueta
  • post_tags: etiquetas de publicación
  • campos: campos que necesitan ser resaltados
  • título: aquí se declara que el campo de título debe resaltarse, y luego puede establecer una configuración única para este campo, o puede estar vacío

OBTENER solicitud: http://127.0.0.1:9200/student/_search

{
    
    
	"query": {
    
    
		"match_all": {
    
    }
	},
	"from": 0,
	"size": 2
}

inserte la descripción de la imagen aquí

consulta completa

(Usualmente se usa junto con paginación, porque cuando la cantidad de datos es grande...)
Solicitud GET/POST: http://127.0.0.1:9200/student/_search
El contenido del cuerpo de la solicitud es:

{
    
    
    "query": {
    
    
        "match_all":{
    
    
        }
    }
}

inserte la descripción de la imagen aquí

Consulta de paginación

from: el índice de inicio de la página actual, comenzando desde 0 de forma predeterminada. from = (pageNum - 1) * tamaño
tamaño: cuántos elementos se muestran en cada página,

Solicitud GET/POST: http://127.0.0.1:9200/student/_search
El contenido del cuerpo de la solicitud es:

{
    
    
	"query": {
    
    
		"match_all": {
    
    }
	},
	"from": 0,
	"size": 2
}

inserte la descripción de la imagen aquí

consulta de agregación

La agregación permite a los usuarios realizar análisis estadísticos en documentos es, similar a agrupar por en bases de datos relacionales y, por supuesto, hay muchas otras agregaciones, como tomar el valor máximo, el valor promedio, etc.

  • Tome el valor máximo de una
    solicitud GET máxima de campo: http://127.0.0.1:9200/student/_search
{
    
    
	"aggs": {
    
    
		"max_age": {
    
    
			"max": {
    
    
				"field": "age"
			}
		}
	},
	"size": 0
}

inserte la descripción de la imagen aquí

  • Tome el valor mínimo min para un campo
{
    
    
	"aggs": {
    
    
		"min_age": {
    
    
			"min": {
    
    
				"field": "age"
			}
		}
	},
	"size": 0
}

inserte la descripción de la imagen aquí

  • sumar un campo
{
    
    
	"aggs": {
    
    
		"sum_age": {
    
    
			"sum": {
    
    
				"field": "age"
			}
		}
	},
	"size": 0
}

inserte la descripción de la imagen aquí

  • Tome el promedio promedio de un campo

  • Deduplicar el valor de un campo y luego tomar el total

  • Agregación estatal

consulta de agregación de depósito

Supongo que te gusta

Origin blog.csdn.net/weixin_52799373/article/details/126137070
Recomendado
Clasificación