Notas de estudio de ElasticSearch: Capítulo 2 Configuración del entorno e instrucciones HTTP

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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
    }
    

Insertar descripción de la imagen aquí

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
    }
    

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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
    }
    

Insertar descripción de la imagen aquí

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
        }
    }
    

Insertar descripción de la imagen aquí

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.

    Insertar descripción de la imagen aquí

    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.

Insertar descripción de la imagen aquí

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"
        }
    }
}

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

  • 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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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"
        }
    }
}

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí

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
}

Insertar descripción de la imagen aquí

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"
           }
       }
   }
}

Insertar descripción de la imagen aquí

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.

Insertar descripción de la imagen aquí
referencia

[Silicon Valley] Tutorial de ElasticSearch desde el inicio hasta el dominio (basado en las nuevas características de la pila de tecnología ELK elasticsearch 7.x + 8.x)

Supongo que te gusta

Origin blog.csdn.net/weixin_42584100/article/details/129653519
Recomendado
Clasificación