2. Configuración del entorno y comandos HTTP.
2.1 Configuración del entorno
Dirección del sitio web oficial
Cuando estaba estudiando, usé la versión descomprimida de Windows 7.8.0, que se puede usar después de la descompresión.
Tabla de contenido | significado |
---|---|
papelera | Directorio de script ejecutable |
configuración | Directorio de configuración |
jdk | Directorio JDK incorporado |
biblioteca | biblioteca de clases |
registros | Directorio de registro |
módulos | directorio del módulo |
complementos | Directorio de complementos |
El archivo de inicio es /bin/elasticsearch.bat. Haga doble clic en el archivo para iniciar el servicio.
Abra el navegador, ingrese la dirección: http://localhost:9200 y pruebe si el inicio se realizó correctamente.
El puerto predeterminado para el acceso ES HTTP es 9200
ES7.8.0 requiere el uso de JDK1.8 y superior.
2.2 Índice invertido
2.2.1 Estructura de datos en ES
En ES, un dato es un documento y es una base de datos orientada a documentos .
Podemos hacer una analogía con MySQL para comprender cómo ES almacena datos.
El índice en ES puede considerarse como una biblioteca, Tipos equivale a una tabla y Documentos equivale a las filas de la tabla.
Nota : El concepto de tipos aquí se ha debilitado gradualmente . En Elasticsearch 6.X, un índice solo puede contener uno
tipo, en Elasticsearch 7.X, el concepto de Tipo se ha eliminado.
En ES, los datos almacenados están en formato Json .
{
"name":"张三",
"age":18,
"tel":13111111111
}
2.2.2 ¿Qué es un índice invertido?
En ES, para consultar el contenido de los documentos de forma rápida y precisa, ES utiliza un concepto especial: índice invertido .
Por supuesto, el correspondiente es el índice directo que utilizamos a menudo .
A continuación, usamos ejemplos para comprender qué es un índice invertido. Supongamos que existen los siguientes dos conjuntos de datos.
{
"id":1001,
"content":"This is a test case"
}
{
"id":1002,
"content":"This is a case"
}
Cuando utilizamos un índice directo, almacenamos los datos de la siguiente manera
identificación | contenido |
---|---|
1001 | Este es un caso de prueba |
1002 | Este es un caso |
En este momento, la identificación se usa como clave principal y se establece un índice de clave principal, para que podamos encontrar rápidamente los datos con el número correspondiente según la identificación. Luego, cuando necesitamos consultar datos que contienen mayúsculas y minúsculas, no hay ningún índice disponible, por lo que la eficiencia será más lenta.
Por lo tanto, podemos utilizar el índice invertido para optimizar las consultas y podemos asociar palabras clave con identificadores.
palabra clave | identificación |
---|---|
caso | 1001,1002 |
Este | 1001,1002 |
prueba | 1001 |
En este momento, cuando necesitamos encontrar datos que contienen datos de casos, primero podemos encontrar la identificación que contiene datos de casos a través del índice de palabras clave y luego encontrar el contenido correspondiente a través de la asociación de identificación.
De la introducción anterior, podemos ver que el llamado índice directo es encontrar el valor según la clave, y el índice invertido es encontrar la clave según el valor.
2.3 comandos HTTP
A través de la introducción del capítulo anterior, sabemos que ES es un motor de búsqueda de texto completo RESTful, por lo que podemos operar ES directamente a través de instrucciones HTTP.
2.3.1 Índice
2.3.1.1 Crear índice
Envíe la siguiente solicitud PUT al puerto 9200 del servicio ES : http://localhost:9200/index name para crear un índice.
Comentarios del valor de retorno:
{
"acknowledged": true, // 响应结果
"shards_acknowledged": true, // 分片结果
"index": "test" // 索引名称
}
Nota: El número predeterminado de fragmentos para crear una biblioteca de índices es 1. En las versiones de Elasticsearch anteriores a 7.0.0, el valor predeterminado es 5 fragmentos. Los índices con el mismo nombre no se pueden crear repetidamente; de lo contrario, se informará un error. El error es como sigue
2.3.1.2 Ver índice
-
Ver todos los índices
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http://localhost:9200/_cat/indices?v para ver todos los índices en el servicio ES actual.
Los campos del valor de retorno se explican en la siguiente tabla.
Campo | significado |
---|---|
salud | Estado de salud actual del servidor: verde (el clúster está completo) amarillo (un solo punto es normal, el clúster está incompleto) rojo (un solo punto es anormal) |
estado | Estado del índice abierto o cerrado |
índice | Nombre del índice |
UUID | Número de índice |
en | Número de fragmentos primarios |
reps | Número de copias |
docs.count | Número de documentos disponibles |
documentos eliminados | Documentos en estado eliminado (lápidas) |
tienda.tamaño | El espacio total ocupado por fragmentos primarios y secundarios. |
pri.tienda.tamaño | El espacio ocupado por el fragmento primario. |
-
Ver el índice especificado
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES: http://localhost:9200/index name para ver el índice especificado.
Comentarios del valor de retorno:
{
"test": {
// 索引名
"aliases": {
}, // 别名
"mappings": {
}, // 映射
"settings": {
// 设置
"index": {
// 设置-索引
"creation_date": "1678625395428", // 设置-索引-创建时间
"number_of_shards": "1", // 设置-索引-主分片数量
"number_of_replicas": "1", // 设置-索引-副分片数量
"uuid": "lKhZuv6ISHqnSfRCheVg1A", // 设置-索引-唯一标识
"version": {
// 设置-索引-版本
"created": "7080099"
},
"provided_name": "test" // 设置-索引-名称
}
}
}
}
2.3.1.3 Eliminar índice
Envíe la siguiente solicitud DELETE al puerto 9200 del servicio ES : http://localhost:9200/index name para eliminar el índice especificado.
2.3.2 Documentación
2.3.2.1 Crear documentos
A través del aprendizaje anterior, sabemos que los documentos en ES se pueden comparar con los datos de tablas en bases de datos relacionales, y que los documentos almacenados en ES están en formato JSON. Por lo tanto, cuando agregamos documentos al índice, también necesitamos agregar datos en formato JSON .
-
No se ha especificado ninguna clave principal
Envíe la siguiente solicitud POST al puerto 9200 del servicio ES: http/localhost:9200/index name/_doc y agregue los siguientes datos en el cuerpo de la solicitud
{ "title":"iPhone 14 pro 256G 玫瑰金", "category":"苹果", "price":10999.00 }
Comentarios del valor de retorno:
{
"_index": "test", // 索引名
"_type": "_doc", // 类型-文档
"_id": "aoP21YYBkGp7UZAjbSvt", // 唯一标识,由于添加时没有指定,因此ES会随机生成
"_version": 1, // 版本
"result": "created", // 结果,created表示创建成功
"_shards": {
// 分片
"total": 2, // 分片-总数
"successful": 1, // 分片-成功
"failed": 0 // 分片-失败
},
"_seq_no": 0,
"_primary_term": 1
}
-
Especificar clave principal
Envíe la siguiente solicitud PUT al puerto 9200 del servicio ES: http/localhost:9200/index name/_doc/primary key number y agregue los siguientes datos en el cuerpo de la solicitud
{ "title":"iPhone 14 pro 256G 暗夜紫", "category":"苹果", "price":10999.00 }
En este momento, el valor de la identificación de la clave principal es el 1001 que especificamos.
2.3.2.2 Ver documentos
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES: http/localhost:9200/index name/_doc/primary key number para ver el documento con el ID especificado.
Comentarios del valor de retorno:
{
"_index": "test", // 索引名称
"_type": "_doc", // 类型-文档
"_id": "1001", // 主键号
"_version": 1, // 版本
"_seq_no": 13,
"_primary_term": 1,
"found": true, // 查询结果,true为已找到,false为未找到
"_source": {
// 文档源信息
"title": "iPhone 14 pro 256G 暗夜紫",
"category": "苹果",
"price": 10999.00
}
}
2.3.2.3 Modificar documentos
La modificación de documentos se divide en modificación total y modificación parcial.
-
Modificación completa
La llamada modificación completa significa que los datos originales (incluida la estructura) se sobrescriben con datos nuevos.
La solicitud de modificación completa es la misma que la ruta de solicitud para crear un documento y especificar la clave principal.
Envíe la siguiente solicitud POST al puerto 9200 del servicio ES: http/localhost:9200/index name/_doc/primary key number y agregue los siguientes datos en el cuerpo de la solicitud
{ "title":"iPhone 14", "category":"苹果", "price":6999.00 }
Si el resultado en el valor de retorno se actualiza, significa que la modificación se realizó correctamente. Tenga en cuenta que el número de versión aquí cambia a 2.
-
modificación local
La llamada modificación parcial significa que solo se modifica el valor de un determinado campo en el documento original.
Envíe la siguiente solicitud POST al puerto 9200 del servicio ES: http/localhost:9200/index name/_update/primary key number y agregue los siguientes datos en el cuerpo de la solicitud
{ "doc":{ "title":"iPhone 14 pro 256G 暗夜紫", "price":10999 } }
Si el resultado en el valor de retorno se actualiza, significa que la modificación fue exitosa. Tenga en cuenta que el número de versión aquí ha cambiado a 3.
2.3.2.4 Eliminar documentos
-
Eliminar documentos según el número de clave principal
Envíe la siguiente solicitud DELETE al puerto 9200 del servicio ES: http/localhost:9200/index name/_doc/primary key number para eliminar el documento con la identificación especificada.
Si el resultado en el valor de retorno es eliminado, significa que la eliminación se realizó correctamente. Tenga en cuenta que el número de versión aquí cambia a 4, lo que significa que eliminar un documento no se eliminará del disco inmediatamente, solo se marcará como eliminado. (eliminación lógica).
-
Eliminar documentos según criterios específicos
Envíe la siguiente solicitud POST al puerto 9200 del servicio ES: http/localhost:9200/index name/_delete_by_query y agregue el siguiente contenido al cuerpo de la solicitud
{ "query":{ "match":{ "price":6999.00 } } }
La condición anterior significa que se eliminan los documentos que satisfacen el valor del campo de precio de 6999,00. El formato condicional anterior se explicará en el capítulo de consulta avanzada a continuación.
Comentarios del valor de retorno:
{
"took": 228, // 本次操作耗时,单位为ms
"timed_out": false, // 是否超时
"total": 4, // 总数
"deleted": 4, // 删除的数量
"batches": 1,
"version_conflicts": 0,
"noops": 0,
"retries": {
"bulk": 0,
"search": 0
},
"throttled_millis": 0,
"requests_per_second": -1.0,
"throttled_until_millis": 0,
"failures": []
}
2.3.3 Mapeo
La función del mapeo en ES es equivalente a la estructura de la tabla en MySQL.
De manera similar a la estructura de la tabla en una base de datos, la creación de una tabla de base de datos requiere establecer nombres de campo, tipos, longitudes, restricciones, etc., lo mismo ocurre con los índices. Necesita saber qué campos están bajo este tipo y qué información de restricción tiene cada campo. Esto se llama mapeo.
2.3.3.1 Crear mapeo
Envíe la siguiente solicitud PUT al puerto 9200 del servicio ES: http/localhost:9200/index name/_mapping y agregue el siguiente contenido al cuerpo de la solicitud
{
"properties":{
"name":{
// 类型为text,会分词
"type":"text",
// 该字段是否可以被索引
"index":true
},
"sex":{
// 类型为keyword,不会分词
"type":"keyword",
"index":true
},
"tel":{
"type":"keyword",
"index":false
},
"age":{
// 类型为数值类型
"type":"integer"
}
}
}
Descripción de los datos de mapeo:
-
Nombre del campo: complételo arbitrariamente, especifique muchos atributos a continuación, como: título, subtítulo, imágenes, precio
-
tipo: tipo, los tipos de datos admitidos en Elasticsearch son muy ricos, los siguientes son varios tipos de claves
-
Tipo de cadena, dividido en dos tipos, texto (palabras separables) y palabra clave (palabras no separables)
Los campos de tipo texto serán segmentados por ES según el analizador especificado.
Los campos de tipo palabra clave no serán segmentados por ES
-
Tipo de valor numérico, dividido en dos categorías.
- Tipos de datos básicos: largo, entero, corto, byte, doble, flotante, half_float
- Tipo de alta precisión para números de punto flotante: scaled_float
-
Fecha: tipo de fecha
-
Matriz: tipo de matriz
-
Objeto Objeto
-
-
índice: si se indexa, el valor predeterminado es verdadero, si no se realiza ninguna configuración, se indexarán todos los campos.
- verdadero: el campo se indexará y se podrá utilizar para buscar
- falso: el campo no se indexará y no se podrá buscar
-
almacenar: si se deben almacenar datos de forma independiente, el valor predeterminado es falso
-
El texto original se almacenará en _source. De forma predeterminada, otros campos extraídos no se almacenan de forma independiente.
Sí, se extrae de _source. Por supuesto, también puedes almacenar un campo de forma independiente, siempre que establezcas
"store": verdadero es suficiente. Obtener campos almacenados de forma independiente es mucho más rápido que analizar desde _source, pero también ocupará
Más espacio, por lo que conviene configurarlo según las necesidades reales del negocio.
-
-
analizador: Especifique el analizador, respecto al analizador, habrá un capítulo especial para explicarlo más adelante.
2.3.3.2 Ver mapeo
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_mapping para consultar la asignación.
2.3.4 Consulta avanzada
Elasticsearch proporciona un DSL de consulta completo basado en JSON para definir consultas.
Primero agreguemos algunos datos siguientes al índice de prueba.
{
"name":"ZhangSan",
"sex":"man",
"tel":"13111111111",
"age":22
}
{
"name":"ZhangSan1",
"sex":"woman",
"tel":"13111111111",
"age":24
}
{
"name":"ZhangSan2",
"sex":"woman",
"tel":"13111111111",
"age":24
}
{
"name":"LiSi",
"sex":"man",
"tel":"13111111115",
"age":22
}
{
"name":"WangWu",
"sex":"woman",
"tel":"13111111114",
"age":23
}
{
"name":"ZhaoLiu",
"sex":"woman",
"tel":"13111111112",
"age":24
}
2.3.4.1 Consultar todos los documentos
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{
"query": {
"match_all": {
}
}
}
"consulta" representa un objeto de consulta, que puede tener diferentes atributos de consulta.
"match_all" indica el tipo de consulta, por ejemplo: match_all (indica consultar todo), así como coincidencias, términos, rangos y otros tipos, que se presentarán en las siguientes secciones.
"match_all": {}, seguido de {} son condiciones de consulta. Como estamos consultando todos aquí, no se necesitan condiciones de consulta adicionales.
Comentarios sobre la información de devolución:
{
"took": 0, // 查询花费时间,单位毫秒
"timed_out": false, // 是否超时
"_shards": {
// 分片信息
"total": 1, // 分片总数
"successful": 1, // 成功
"skipped": 0, // 忽略
"failed": 0 // 失败
},
"hits": {
// 搜索命中结果
"total": {
// 搜索条件匹配的文档总数
"value": 6, // 总命中计数的值
"relation": "eq" // 计数规则,eq 表示计数准确, gte 表示计数不准确
},
"max_score": 1.0, // 匹配度分值
"hits": [ // 命中结果集合
{
"_index": "test", // 索引名
"_type": "_doc", // 类型是文档
"_id": "WeMF24YBubtchCWfjp6V", // 唯一标识
"_score": 1.0, // 该条记录匹配得分
"_source": {
// 记录数据源
"name": "ZhangSan",
"sex": "man",
"tel": "13111111111",
"age": 22
}
},
...
]
}
}
2.3.4.2 Consulta de coincidencia
La consulta de tipo de coincidencia segmentará las condiciones de la consulta en palabras y luego consultará. Existe una relación O entre varias entradas.
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{
"query":{
"match":{
"name":"zhangsan"
}
}
}
Las condiciones de consulta anteriores indican que el campo de nombre de la consulta contiene datos sobre zhangsan.
Como puede ver, solo un dato coincide en los resultados devueltos.
2.3.4.3 Consulta de coincidencia de múltiples campos
multi_match es similar a match, excepto que puede realizar consultas en varios campos.
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{
"query":{
"multi_match":{
"query":"woman",
"fields":["name","sex"]
}
}
}
Las condiciones de consulta anteriores indican que la consulta contiene datos de mujer en el campo de nombre o en el campo de sexo.
2.3.4.4 Consulta precisa de palabras clave
Consulta de términos, consulta de concordancia precisa de palabras clave, sin segmentación de palabras de las condiciones de consulta .
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{
"query":{
"term":{
"age":22
}
}
}
或者
{
"query":{
"term":{
"age":{
"value":22
}
}
}
}
Las condiciones de consulta anteriores indican que se deben consultar los datos cuyo valor del campo de edad es 22.
2.3.4.5 Concordancia exacta de varias palabras clave
La consulta de términos es la misma que la consulta de términos, pero permite especificar varios valores para hacer coincidir. Si este campo contiene alguno de los valores especificados, entonces este documento cumple la condición, que es equivalente a la palabra clave in en MySQL.
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{
"query":{
"terms":{
"age":[22,23]
}
}
}
Las condiciones de consulta anteriores indican que la consulta es para datos cuyo valor del campo de edad es 22 o 23.
2.3.4.6 Consulta combinada
En ES, se utiliza la palabra clave bool , combinada con las palabras clave must , must_not y debería para combinar múltiples consultas y formar condiciones de consulta más complejas.
debe significa que debe cumplirse al mismo tiempo, lo que equivale a AND
must_not significa que no se debe cumplir al mismo tiempo, lo que equivale a NOT
debería significa debería, equivalente a O
-
debe ejemplo
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{ "query":{ // 条件 "bool":{ // 多个条件必须同时成立,即 AND "must":[ { "match":{ "name":"ZhangSan" } }, { "match":{ "age":22 } } ] } } }
Las condiciones de consulta anteriores indican que el campo de nombre de la consulta contiene ZhangSan y el campo de edad es 22.
-
ejemplo de must_not
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{ "query":{ // 条件 "bool":{ // 多个条件必须同时不成立,即 NOT "must_not":[ { "match":{ "age":"22" } }, { "match":{ "age":"24" } } ] } } }
Las condiciones de consulta anteriores indican que se consultan los datos cuyo campo de edad no es 24 ni 22.
-
debería ejemplo
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{ "query":{ // 条件 "bool":{ // 多个条件其中有一个成立即可,即 OR "should":[ { "match":{ "age":"22" } }, { "match":{ "age":"24" } } ] } } }
Las condiciones de consulta anteriores indican que el campo de edad de la consulta tiene 24 o 22 datos.
2.3.4.7 Consulta de rango
Consulta de rango, consulta para encontrar aquellos números o tiempos que se encuentran dentro del rango especificado.
La palabra clave range se utilizará con los siguientes caracteres.
personaje | ilustrar |
---|---|
gt | Mayor que (>) |
gte | Mayor o igual a (>=) |
es | Menos de (<) |
lte | Menor o igual a (<=) |
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{
"query":{
"range":{
"age":{
"gt":22,
"lt":24
}
}
}
}
La condición de consulta anterior indica que el valor del campo de antigüedad de la consulta es mayor que 22 y menor que 24 datos.
2.3.4.8 Consultar campos especificados
De forma predeterminada, en los resultados de la consulta de ES, los datos de acceso se colocarán en _source y se devolverán al usuario.
Podemos especificar los campos que queremos consultar y los campos que no queremos consultar en los parámetros de consulta.
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{
"_source":["name","age"],
"query":{
"match":{
"name":"ZhangSan"
}
}
}
Las condiciones de consulta anteriores indican que el campo de nombre de la consulta contiene los datos de ZhangSan y los datos devueltos solo contienen los campos de nombre y edad.
Además de simplemente especificar los campos que queremos consultar en "_source", también podemos usar inclusiones y exclusiones para especificar los campos que queremos consultar y los campos que no queremos consultar, respectivamente.
El ejemplo anterior es equivalente a la siguiente consulta
{
"_source":{
"includes":["name","age"],
"excludes":["sex","tel"]
},
"query":{
"match":{
"name":"ZhangSan"
}
}
}或者
{
"_source":{
"excludes":["sex","tel"]
},
"query":{
"match":{
"name":"ZhangSan"
}
}
}
2.3.4.9 Ordenar consulta
La palabra clave sort nos permite ordenar por diferentes campos y la palabra clave order especifica el método de clasificación. desc descendente, asc
Orden ascendente.
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{
// 指定查询字段,方便观察结果
"_source":["age"],
"query":{
// 表示查询全部数据
"match_all":{
}
},
// 设置排序规则
"sort":{
// 排序的字段
"age":{
// 正序or倒序
"order":"desc"
}
}
}
La consulta anterior indica que la consulta está ordenada en orden inverso según el campo de edad.
En ES, se admiten consultas de clasificación de múltiples campos, que pueden satisfacer las necesidades de orden descendente según un determinado campo y orden ascendente según un determinado campo.
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{
// 指定查询字段,方便观察结果
"_source":["age"],
"query":{
// 表示查询全部数据
"match_all":{
}
},
// 设置排序规则
"sort":{
// 排序的字段
"age":{
// 正序or倒序
"order":"desc"
},
"_score":{
"order":"asc"
}
}
}
Las condiciones de consulta anteriores indican que los datos se ordenan en orden descendente según el valor del campo de edad y luego en orden ascendente según la puntuación de relevancia.
2.3.4.10 Consulta de paginación
En ES, utilice las palabras clave from y size para completar consultas de paginación.
from representa el índice inicial de la página actual, comenzando desde 0 de forma predeterminada. La fórmula de cálculo es (número de página actual - 1) * tamaño de página
El tamaño representa el tamaño de la página, es decir, cuántos datos se muestran en cada página.
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{
"query":{
// 表示查询全部数据
"match_all":{
}
},
// 从第几条数据开始,下标以0开始,计算公式:(页码 - 1) * 页大小,例如查第二页,则是(2 - 1) * 2 = 2
"from":0,
// 页大小
"size":2
}
2.3.4.11 Consulta de agregación
En ES, puede utilizar las palabras clave combinadas con palabras clave agregadas como términos, máximo, promedio, etc. para realizar análisis estadísticos de documentos.
Los términos representan estadísticas de grupo, similares a agrupar por en MySQL. Tenga en cuenta que los términos aquí se usan en aggs y deben distinguirse de las palabras clave de consulta de términos.
max significa encontrar el valor máximo
avg significa promediar
suma significa suma
cardinalidad significa encontrar el número total después de eliminar duplicados
las estadísticas devolverán recuento, máximo, mínimo, promedio y suma de cinco indicadores a la vez
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{
// 聚合操作
"aggs":{
// 统计结果的名称
"age_group":{
// 分组
"terms":{
// 分组字段
"field":"age"
}
},
// 统计结果的名称
"age_avg":{
// 平均值
"avg":{
// 取平均值字段
"field":"age"
}
},
"age_max":{
// 最大值
"max":{
"field":"age"
}
},
"age_min":{
// 最小值
"min":{
"field":"age"
}
},
"age_sum":{
// 求和
"sum":{
"field":"age"
}
},
"age_distinct":{
// 去重后求总数
"cardinality":{
"field":"age"
}
},
"age_stats":{
// stats 聚合,对某个字段一次性返回 count,max,min,avg 和 sum 五个指标
"stats":{
"field":"age"
}
}
}
}
2.3.4.12 Consulta resaltada
Elasticsearch puede establecer etiquetas y estilos (resaltado) para la parte de palabras clave en el contenido de la consulta.
Los desarrolladores pueden personalizar los estilos.
Cuando se utiliza la consulta de coincidencia y se agrega un atributo resaltado, se puede realizar la consulta resaltada.
- pre_tags : etiquetas previas
- post_tags : etiquetas de publicación
- campos : campos que deben resaltarse
- título : Aquí se indica que el campo de título debe resaltarse. Puede establecer una configuración única para este campo más adelante o puede estar vacío.
Envíe la siguiente solicitud GET al puerto 9200 del servicio ES : http/localhost:9200/index name/_search y agregue el siguiente contenido en el cuerpo de la solicitud
{
"query":{
"match":{
"name":"ZhangSan"
}
},
"highlight":{
"pre_tags":"<font color='red'>",
"post_tags":"</font>",
"fields":{
"name":{
}
}
}
}
Las condiciones de consulta anteriores indican que el campo de nombre de la consulta contiene ZhangSan y las palabras clave en el valor de retorno se muestran en rojo.
referencia