2. Configuração do ambiente e comandos HTTP
2.1 Configuração do ambiente
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.
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.
Í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.
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
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.
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.
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.
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 }
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 }
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.
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 }
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 } }
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.
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.
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"
}
}
}
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.
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.
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.
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.
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.
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.
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.
-
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.
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.
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.
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"
}
}
}
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.
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.
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
}
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"
}
}
}
}
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.
referência