Notas de estudo do ElasticSearch - Capítulo 2 Configuração do ambiente e instruções HTTP

2. Configuração do ambiente e comandos HTTP

2.1 Configuração do ambiente

Endereço do site oficial

Quando eu estava estudando, usei a versão descompactada do Windows versão 7.8.0, que pode ser usada após a descompactação.

Índice significado
caixa Diretório de script executável
configuração Diretório de configuração
jdk Diretório JDK integrado
biblioteca Biblioteca de classes
Histórico Diretório de registros
módulos diretório do módulo
plug-ins Diretório de plug-ins

O arquivo de inicialização é /bin/elasticsearch.bat. Clique duas vezes no arquivo para iniciar o serviço.

Abra o navegador, digite o endereço: http://localhost:9200 e teste se a inicialização foi bem-sucedida.

Insira a descrição da imagem aqui

A porta padrão para acesso ES HTTP é 9200

ES7.8.0 requer JDK1.8 e superior para ser usado.

2.2 Índice invertido

2.2.1 Estrutura de dados em ES

No ES, um dado é um documento e é um banco de dados orientado a documentos .

Podemos fazer uma analogia com o MySQL para entender como o ES armazena dados.

Insira a descrição da imagem aqui

Índice em ES pode ser considerado uma biblioteca, Tipos é equivalente a uma tabela e Documentos é equivalente às linhas da tabela.

Nota : O conceito de tipos aqui foi gradualmente enfraquecido . No Elasticsearch 6.X, um índice pode conter apenas um

type, no Elasticsearch 7.X, o conceito de Type foi excluído.

No ES, os dados armazenados estão no formato Json .

{
    
    
    "name":"张三",
    "age":18,
    "tel":13111111111
}

2.2.2 O que é um índice invertido?

No ES, para consultar o conteúdo dos documentos com rapidez e precisão, o ES utiliza um conceito especial: índice invertido .

Claro, o correspondente é o índice direto que usamos com frequência .

A seguir, usamos exemplos para entender o que é um índice invertido. Suponha que existam os dois conjuntos de dados a seguir

{
    
    
    "id":1001,
    "content":"This is a test case"
}
{
    
    
    "id":1002,
    "content":"This is a case"
}

Quando usamos um índice direto, armazenamos os dados da seguinte forma

eu ia contente
1001 Este é um caso de teste
1002 Este é um caso

Neste momento, o id é usado como chave primária e um índice de chave primária é estabelecido, para que possamos encontrar rapidamente os dados com o número correspondente com base no id. Então, quando precisarmos consultar dados contendo case, nenhum índice estará disponível, então a eficiência será mais lenta.

Portanto, podemos usar o índice invertido para otimizar consultas e podemos associar palavras-chave a ids.

palavra-chave eu ia
caso 1001.1002
Esse 1001.1002
teste 1001

Neste momento, quando precisamos encontrar dados contendo dados de caso, podemos primeiro encontrar o ID contendo dados de caso por meio do índice de palavras-chave e, em seguida, encontrar o conteúdo correspondente por meio de associação de ID.

A partir da introdução acima, podemos realmente ver que o chamado índice direto serve para encontrar o valor com base na chave, e o índice invertido serve para encontrar a chave com base no valor.

2.3 Comandos HTTP

Pela introdução do capítulo anterior, sabemos que ES é um mecanismo de pesquisa de texto completo RESTful, portanto, podemos operar o ES diretamente por meio de instruções HTTP.

2.3.1 Índice

2.3.1.1 Criar índice

Envie a seguinte solicitação PUT para a porta 9200 do serviço ES : http://localhost:9200/index name para criar um índice.

Insira a descrição da imagem aqui

Comentários sobre valor de retorno:

{
    
    
    "acknowledged": true, // 响应结果
    "shards_acknowledged": true, // 分片结果
    "index": "test" // 索引名称
}

Observação: o número padrão de fragmentos para criar uma biblioteca de índice é 1. Nas versões do Elasticsearch anteriores à 7.0.0, o padrão é 5 fragmentos. Índices com o mesmo nome não podem ser criados repetidamente, caso contrário, um erro será relatado. O erro é como segue

Insira a descrição da imagem aqui

2.3.1.2 Ver índice
  • Ver todos os índices

    Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http://localhost:9200/_cat/indices?v para visualizar todos os índices no serviço ES atual.

Insira a descrição da imagem aqui

Os campos do valor de retorno são explicados na tabela a seguir.

Campo significado
saúde Status atual de integridade do servidor: verde (cluster completo) amarelo (ponto único normal, cluster incompleto) vermelho (ponto único anormal)
status Status do índice aberto ou fechado
índice Nome do índice
uuid Número do índice
no Número de fragmentos primários
representante Número de cópias
documentos.count Número de documentos disponíveis
documentos.deletados Documentos em estado excluído (lápides)
loja.tamanho O espaço geral ocupado pelos fragmentos primários e secundários
pri.store.size O espaço ocupado pelo fragmento primário
  • Ver o índice especificado

    Envie a seguinte solicitação GET para a porta 9200 do serviço ES: http://localhost:9200/index name para visualizar o índice especificado.

Insira a descrição da imagem aqui

Comentários sobre 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 Excluir índice

Envie a seguinte solicitação DELETE para a porta 9200 do serviço ES : http://localhost:9200/index name para excluir o índice especificado.

Insira a descrição da imagem aqui

2.3.2 Documentação

2.3.2.1 Criar documentos

Através do aprendizado acima, sabemos que os documentos no ES podem ser comparados aos dados da tabela em bancos de dados relacionais, e os documentos armazenados no ES estão no formato JSON. Portanto, quando adicionamos documentos ao índice, também precisamos adicionar dados no formato JSON .

  • Nenhuma chave primária especificada

    Envie a seguinte solicitação POST para a porta 9200 do serviço ES: http/localhost:9200/index name/_doc e adicione os seguintes dados no corpo da solicitação

    {
          
          
     "title":"iPhone 14 pro 256G 玫瑰金",
     "category":"苹果",
     "price":10999.00
    }
    

Insira a descrição da imagem aqui

Comentários sobre 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
}
  • Especifique a chave primária

    Envie a seguinte solicitação PUT para a porta 9200 do serviço ES: http/localhost:9200/index name/_doc/primary key number e adicione os seguintes dados no corpo da solicitação

    {
          
          
     "title":"iPhone 14 pro 256G 暗夜紫",
     "category":"苹果",
     "price":10999.00
    }
    

Insira a descrição da imagem aqui

Neste momento, o valor do ID da chave primária é o 1001 que especificamos.

2.3.2.2 Visualizar documentos

Envie a seguinte solicitação GET para a porta 9200 do serviço ES: http/localhost:9200/index name/_doc/primary key number para visualizar o documento com o ID especificado.

Insira a descrição da imagem aqui

Comentários sobre 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

A modificação de documentos é dividida em modificação total e modificação parcial.

  • Modificação completa

    A chamada modificação completa significa que os dados originais (incluindo a estrutura) são substituídos por novos dados.

    A solicitação de modificação completa é igual ao caminho da solicitação para criar um documento e especificar a chave primária.

    Envie a seguinte solicitação POST para a porta 9200 do serviço ES: http/localhost:9200/index name/_doc/primary key number e adicione os seguintes dados no corpo da solicitação

    {
          
          
     "title":"iPhone 14",
     "category":"苹果",
     "price":6999.00
    }
    

Insira a descrição da imagem aqui

Se o resultado no valor de retorno for atualizado, significa que a modificação foi bem-sucedida. Observe que o número da versão aqui muda para 2.

  • modificação local

    A chamada modificação parcial significa que apenas o valor de um determinado campo do documento original é modificado.

    Envie a seguinte solicitação POST para a porta 9200 do serviço ES: http/localhost:9200/index name/_update/primary key number e adicione os seguintes dados no corpo da solicitação

    {
          
          
        "doc":{
          
          
            "title":"iPhone 14 pro 256G 暗夜紫",
            "price":10999
        }
    }
    

Insira a descrição da imagem aqui

Se o resultado no valor de retorno for atualizado, significa que a modificação foi bem-sucedida. Observe que o número da versão aqui mudou para 3.

2.3.2.4 Excluir documentos
  • Excluir documentos com base no número da chave primária

    Envie a seguinte solicitação DELETE para a porta 9200 do serviço ES: http/localhost:9200/index name/_doc/primary key number para excluir o documento com o ID especificado.

    Insira a descrição da imagem aqui

    Se o resultado no valor de retorno for excluído, significa que a exclusão foi bem-sucedida. Observe que o número da versão aqui muda para 4, o que significa que a exclusão de um documento não será removida do disco imediatamente, apenas será marcada como excluída (exclusão lógica).

  • Exclua documentos com base em condições especificadas

    Envie a seguinte solicitação POST para a porta 9200 do serviço ES: http/localhost:9200/index name/_delete_by_query e adicione o seguinte conteúdo ao corpo da solicitação

    {
          
          
        "query":{
          
          
            "match":{
          
          
                "price":6999.00
            }
        }
    }
    

    A condição acima significa que os documentos que atendem ao valor do campo de preço 6999,00 serão excluídos. O formato condicional acima será explicado no capítulo de consulta avançada abaixo.

Insira a descrição da imagem aqui

Comentários sobre 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 Mapeamento

A função do mapeamento no ES é equivalente à estrutura da tabela no MySQL.

Semelhante à estrutura da tabela em um banco de dados, a criação de uma tabela de banco de dados requer a definição de nomes de campos, tipos, comprimentos, restrições, etc.; o mesmo vale para índices. Você precisa saber quais campos estão sob esse tipo e quais informações de restrição cada campo possui Isso é chamado de mapeamento.

2.3.3.1 Criar mapeamento

Envie a seguinte solicitação PUT para a porta 9200 do serviço ES: http/localhost:9200/index name/_mapping e adicione o seguinte conteúdo ao corpo da solicitação

{
    
    
    "properties":{
    
    
        "name":{
    
    
            // 类型为text,会分词
            "type":"text",
            // 该字段是否可以被索引
            "index":true
        },
        "sex":{
    
    
            // 类型为keyword,不会分词
            "type":"keyword",
            "index":true
        },
        "tel":{
    
    
            "type":"keyword",
            "index":false
        },
        "age":{
    
    
            // 类型为数值类型
            "type":"integer"
        }
    }
}

Insira a descrição da imagem aqui

Descrição dos dados de mapeamento:

  • Nome do campo: Preencha arbitrariamente, especifique vários atributos abaixo, como: título, subtítulo, imagens, preço

  • tipo: tipo, os tipos de dados suportados no Elasticsearch são muito ricos, a seguir estão vários tipos de chave

    • Tipo string, dividido em dois tipos, texto (palavras separáveis) e palavra-chave (palavras inseparáveis)

      Os campos do tipo texto serão segmentados por ES de acordo com o analisador especificado.

      Campos do tipo palavra-chave não serão segmentados por ES

    • Tipo de valor numérico, dividido em duas categorias

      • Tipos de dados básicos: longo, inteiro, curto, byte, duplo, flutuante, half_float
      • Tipo de alta precisão para números de ponto flutuante: scaled_float
    • Data: tipo de data

    • Matriz: tipo de matriz

    • Objeto: Objeto

  • índice: Seja para indexar, o padrão é verdadeiro, se nenhuma configuração for feita, todos os campos serão indexados.

    • true: O campo será indexado e poderá ser usado para pesquisar
    • false: O campo não será indexado e não poderá ser pesquisado
  • armazenar: se deseja armazenar dados de forma independente, o padrão é falso

    • O texto original será armazenado em _source. Por padrão, outros campos extraídos não são armazenados de forma independente.

      Sim, é extraído de _source. Claro, você também pode armazenar um campo de forma independente, desde que defina

      "store": true é suficiente. A obtenção de campos armazenados de forma independente é muito mais rápida do que a análise de _source, mas também ocupará

      Mais espaço, por isso deve ser definido de acordo com as necessidades reais do negócio.

  • analisador: Especifique o analisador. Em relação ao analisador, haverá um capítulo especial para explicá-lo posteriormente.

2.3.3.2 Visualizar mapeamento

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_mapping para consultar o mapeamento.

Insira a descrição da imagem aqui

2.3.4 Consulta avançada

Elasticsearch fornece uma consulta DSL completa baseada em JSON para definir consultas.

Vamos primeiro adicionar alguns dados a seguir ao índice de teste

{
    
    
 "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 os documentos

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

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

"query" representa um objeto de consulta, que pode ter diferentes atributos de consulta.

"match_all" indica o tipo de consulta, por exemplo: match_all (indica a consulta de todos), bem como match, termo, intervalo e outros tipos, que serão apresentados nas seções a seguir.

"match_all": {}, seguido por {} são condições de consulta. Como estamos consultando tudo aqui, nenhuma condição de consulta adicional é necessária.

Insira a descrição da imagem aqui

Comentários de informações de retorno:

{
    
    
    "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 correspondência

A consulta do tipo de correspondência de correspondência segmentará as condições da consulta em palavras e depois consultará. Existe uma relação OR entre várias entradas.

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

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

As condições de consulta acima indicam que o campo do nome da consulta contém dados sobre zhangsan.

Insira a descrição da imagem aqui

Como você pode ver, apenas um dado corresponde aos resultados retornados.

2.3.4.3 Consulta de correspondência multicampo

multi_match é semelhante a match, exceto que pode consultar em vários campos.

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

{
    
    
    "query":{
    
    
        "multi_match":{
    
    
            "query":"woman",
            "fields":["name","sex"]
        }
    }
}

As condições de consulta acima indicam que a consulta contém dados de mulheres no campo de nome ou no campo de sexo.

Insira a descrição da imagem aqui

2.3.4.4 Consulta precisa de palavras-chave

Consulta de termos, consulta precisa de correspondência de palavras-chave, sem segmentação de palavras das condições de consulta .

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

{
    
    
    "query":{
    
    
        "term":{
    
    
            "age":22
        }
    }
}
或者
{
    
    
    "query":{
    
    
        "term":{
    
    
            "age":{
    
    
                "value":22
            }
        }
    }
}

As condições de consulta acima indicam que os dados cujo valor do campo idade é 22 devem ser consultados.

Insira a descrição da imagem aqui

2.3.4.5 Correspondência exata de múltiplas palavras-chave

A consulta de termos é igual à consulta de termos, mas permite que vários valores sejam especificados para correspondência. Se este campo contiver algum dos valores especificados, então este documento atende à condição, que é equivalente à palavra-chave in no MySQL

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

{
    
    
    "query":{
    
    
        "terms":{
    
    
            "age":[22,23]
        }
    }
}

As condições de consulta acima indicam que o valor do campo idade da consulta é 22 ou 23 dados.

Insira a descrição da imagem aqui

2.3.4.6 Consulta combinada

No ES, a palavra-chave bool é usada, combinada com as palavras-chave must , must_not e should para combinar várias consultas para formar condições de consulta mais complexas.

must significa que deve ser satisfeito ao mesmo tempo, o que equivale a AND

must_not significa que não deve ser satisfeito ao mesmo tempo, o que equivale a NOT

deveria significa deveria, equivalente a OU

  • deve exemplo

    Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

    {
          
          
        "query":{
          
          
            // 条件
            "bool":{
          
          
                // 多个条件必须同时成立,即 AND
                "must":[
                    {
          
          
                        "match":{
          
          
                            "name":"ZhangSan"
                        }
                    },
                    {
          
          
                        "match":{
          
          
                            "age":22
                        }
                    }
                ]
            }
        }
    }
    

    As condições de consulta acima indicam que o campo do nome da consulta contém ZhangSan e o campo de idade é 22.

Insira a descrição da imagem aqui

  • exemplo must_not

    Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

    {
          
          
        "query":{
          
          
            // 条件
            "bool":{
          
          
                // 多个条件必须同时不成立,即 NOT
                "must_not":[
                    {
          
          
                        "match":{
          
          
                            "age":"22"
                        }
                    },
                    {
          
          
                        "match":{
          
          
                            "age":"24"
                        }
                    }
                ]
            }
        }
    }
    

    As condições de consulta acima indicam que os dados cujo campo idade não é 24 e nem 22 são consultados.

  • deveria exemplo

    Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

    {
          
          
        "query":{
          
          
            // 条件
            "bool":{
          
          
                // 多个条件其中有一个成立即可,即 OR
                "should":[
                    {
          
          
                        "match":{
          
          
                            "age":"22"
                        }
                    },
                    {
          
          
                        "match":{
          
          
                            "age":"24"
                        }
                    }
                ]
            }
        }
    }
    

    As condições de consulta acima indicam que o campo de idade da consulta tem 24 ou 22 dados.

Insira a descrição da imagem aqui

2.3.4.7 Consulta de intervalo

Consulta de intervalo, consulta para encontrar os números ou horários que estão dentro do intervalo especificado.

A palavra-chave range será usada com os seguintes caracteres.

personagem ilustrar
gt Maior que (>)
gte Maior ou igual a (>=)
isso Menos que (<)
lte Menor ou igual a (<=)

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

{
    
    
    "query":{
    
    
        "range":{
    
    
            "age":{
    
    
                "gt":22,
                "lt":24
            }
        }
    }
}

A condição de consulta acima indica que o valor do campo idade da consulta é maior que 22 e menor que 24 dados.

Insira a descrição da imagem aqui

2.3.4.8 Consultar campos especificados

Por padrão, nos resultados da consulta ES, os dados de ocorrência serão colocados em _source e retornados ao usuário.

Podemos especificar os campos que queremos consultar e os campos que não queremos consultar nos parâmetros de consulta.

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

{
    
    
    "_source":["name","age"],
    "query":{
    
    
        "match":{
    
    
           "name":"ZhangSan"
        }
    }
}

As condições de consulta acima indicam que o campo do nome da consulta contém os dados de ZhangSan e os dados retornados contêm apenas os campos de nome e idade.

Insira a descrição da imagem aqui

Além de simplesmente especificar os campos que queremos consultar em "_source", também podemos usar inclusões e exclusões para especificar os campos que queremos consultar e os campos que não queremos consultar, respectivamente.

O exemplo acima é equivalente à seguinte consulta

{
    
    
     "_source":{
    
    
        "includes":["name","age"],
        "excludes":["sex","tel"]
    },
    "query":{
    
    
        "match":{
    
    
           "name":"ZhangSan"
        }
    }
}或者
{
    
    
     "_source":{
    
    
        "excludes":["sex","tel"]
    },
    "query":{
    
    
        "match":{
    
    
           "name":"ZhangSan"
        }
    }
}

Insira a descrição da imagem aqui

2.3.4.9 Consulta de classificação

A palavra-chave sort nos permite classificar por diferentes campos, e a palavra-chave order especifica o método de classificação. descendente descendente, asc

Ordem ascendente.

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

{
    
    
    // 指定查询字段,方便观察结果
    "_source":["age"],
    "query":{
    
    
        // 表示查询全部数据
        "match_all":{
    
    
        }
    },
    // 设置排序规则
    "sort":{
    
    
        // 排序的字段
        "age":{
    
    
            // 正序or倒序
            "order":"desc"
        }
    }
}

A consulta acima indica que a consulta está classificada na ordem inversa de acordo com o campo idade.

Insira a descrição da imagem aqui

No ES, há suporte para consulta de classificação de vários campos, que pode atender às necessidades de ordem decrescente com base em um determinado campo e ordem crescente com base em um determinado campo.

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

{
    
    
    // 指定查询字段,方便观察结果
    "_source":["age"],
    "query":{
    
    
        // 表示查询全部数据
        "match_all":{
    
    
        }
    },
    // 设置排序规则
    "sort":{
    
    
        // 排序的字段
        "age":{
    
    
            // 正序or倒序
            "order":"desc"
        },
        "_score":{
    
    
            "order":"asc"
        }
    }
}

As condições de consulta acima indicam que os dados são classificados em ordem decrescente de acordo com o valor do campo idade e, a seguir, em ordem crescente de acordo com a pontuação de relevância.

Insira a descrição da imagem aqui

2.3.4.10 Consulta de paginação

No ES, use as palavras-chave from e size para concluir consultas de paginação.

from representa o índice inicial da página atual, começando em 0 por padrão. A fórmula de cálculo é (número da página atual - 1) * tamanho da página

size representa o tamanho da página, ou seja, quantos dados são exibidos em cada página.

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

{
    
    
    "query":{
    
    
        // 表示查询全部数据
        "match_all":{
    
    
        }
    },
    // 从第几条数据开始,下标以0开始,计算公式:(页码 - 1) * 页大小,例如查第二页,则是(2 - 1) * 2 = 2
    "from":0,
    // 页大小
    "size":2
}

Insira a descrição da imagem aqui

2.3.4.11 Consulta de agregação

No ES, você pode usar a palavra-chave aggs combinada com palavras-chave agregadas, como termos, máximo, média, etc. para realizar análises estatísticas em documentos.

Os termos representam estatísticas de grupo, semelhantes a agrupar por no MySQL. Observe que os termos aqui são usados ​​em aggs e devem ser diferenciados dos termos palavras-chave de consulta.

max significa encontrar o valor máximo

avg significa média

soma significa soma

cardinalidade significa encontrar o número total após remover duplicatas

stats retornará contagem, máximo, mínimo, média e somará cinco indicadores de uma vez

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

{
    
    
    // 聚合操作
   "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"
           }
       }
   }
}

Insira a descrição da imagem aqui

2.3.4.12 Consulta de destaque

O Elasticsearch pode definir rótulos e estilos (destaque) para a parte da palavra-chave no conteúdo da consulta.

Os estilos podem ser personalizados pelos desenvolvedores

Ao usar a consulta de correspondência e adicionar um atributo de destaque, a consulta de destaque pode ser realizada.

  • pre_tags : pré-tags
  • post_tags : postar tags
  • campos : campos que precisam ser destacados
  • título : Afirma-se aqui que o campo de título precisa ser destacado. Você pode definir uma configuração exclusiva para este campo posteriormente ou ele pode estar vazio.

Envie a seguinte solicitação GET para a porta 9200 do serviço ES : http/localhost:9200/index name/_search e adicione o seguinte conteúdo no corpo da solicitação

{
    
    
    "query":{
    
    
        "match":{
    
    
            "name":"ZhangSan"
        }
    },
    "highlight":{
    
    
        "pre_tags":"<font color='red'>",
        "post_tags":"</font>",
        "fields":{
    
    
            "name":{
    
    }
        }
    }
}

As condições de consulta acima indicam que o campo do nome da consulta contém ZhangSan e as palavras-chave no valor de retorno são exibidas em vermelho.

Insira a descrição da imagem aqui
referência

[Silicon Valley] Tutorial do ElasticSearch desde o início até o domínio (com base nos novos recursos da pilha de tecnologia ELK elasticsearch 7.x + 8.x)

Acho que você gosta

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