índice
Introdução à sugestão de consulta
Qual é a sugestão de consulta?
Consulta de API sugerida em ES
Conclusão do sugeridor de conclusão automática
Introdução à sugestão de consulta
Qual é a sugestão de consulta?
Sugestões de consulta para fornecer uma boa experiência aos usuários. Incluem principalmente: verificação ortográfica; sugestão automática de palavras de consulta (preenchimento automático)
Consulta de API sugerida em ES
A sugestão de consulta também usa o endereço do terminal _search. Use o nó de sugestão no DSL para definir a consulta de sugestão necessária.
POST twitter/_search
{
"query" : {
"match": {
"message": "tring out Elasticsearch"
}
},
"suggest" : { //定义建议查询
//一个建议查询名
"my-suggestion" : {
"text" : "tring out Elasticsearch", //查询文本
"term" : { //使用词项建议器
"field" : "message" //指定在哪个字段上获取建议词
}
}
}
}
POST _search
{
"suggest": {
"my-suggest-1" : {
"text" : "tring out Elasticsearch",
"term" : {
"field" : "message"
}
},
"my-suggest-2" : {
"text" : "kmichy",
"term" : {
"field" : "user"
}
}
}
}
Várias consultas sugeridas podem usar texto de consulta global
POST _search
{
"suggest": {
"text" : "tring out Elasticsearch",
"my-suggest-1" : {
"term" : {
"field" : "message"
}
},
"my-suggest-2" : {
"term" : {
"field" : "user"
}
}
}
}
Sugestão de introdução
Sugestão de termo
O termo sugestão implementa a segmentação de palavras do texto de entrada e fornece sugestões de termos para consulta difusa de cada palavra. As palavras sugeridas não são fornecidas por padrão para as palavras que existem no índice, e um certo número de palavras sugeridas é selecionado após a classificação de acordo com os resultados da consulta difusa para as palavras inexistentes.
Opções comumente recomendadas:
texto |
Especifique o texto da pesquisa |
campo |
Obtenha o campo de pesquisa para palavras sugeridas |
analisador |
Tokenizer designado |
Tamanho |
Número máximo de palavras sugeridas retornadas por palavra |
ordenar |
Como classificar as palavras sugeridas, opções disponíveis: Pontuação: classifique pela pontuação primeiro, depois classifique pela frequência do documento e ordem dos termos; frequência: classifique primeiro pela frequência do documento e, em seguida, classifique por pontuação e termo. |
modo_de_insugestão |
Modo de sugestão, que controla a forma de sugerir palavras: ausente: as palavras sugeridas são fornecidas apenas quando o termo de pesquisa não existe no índice, o valor padrão; popular: sugira apenas palavras com uma frequência de documento mais alta do que o termo de pesquisa. sempre: sempre forneça sugestões de correspondência. |
sugestão de frase
A sugestão de frase, com base no termo, considerará a relação entre vários termos, como se eles aparecem no texto original do índice ao mesmo tempo, o grau de adjacência e a frequência da palavra, etc.
POST /ftq/_search
{
"query": {
"match_all": {}
},
"suggest" : {
"myss":{
"text": "java sprin boot",
"phrase": {
"field": "title"
}
}
}
}
Conclusão do sugeridor de conclusão automática
Um dispositivo de sugestão projetado para conclusão automática de cenas. Neste cenário, cada vez que o usuário insere um caractere, ele precisa enviar uma solicitação de consulta ao back-end para encontrar um item correspondente imediatamente.Quando a velocidade de entrada do usuário é alta, a velocidade de resposta do back-end é mais exigente. Portanto, em termos de implementação, utiliza uma estrutura de dados diferente dos dois Suggesters anteriores.O índice não é completado por inversão, mas os dados analisados são codificados em FST e armazenados junto com o índice. Para um índice no estado aberto, o FST será carregado na memória pelo ES, e a busca do prefixo é extremamente rápida. Mas o FST só pode ser usado para pesquisa de prefixo, que também é a limitação do Completion Suggester.
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html
Para usar o preenchimento automático, os campos do índice usados para fornecer sugestões de preenchimento precisam ser especialmente projetados, e o tipo de campo é preenchimento.
PUT music
{
"mappings": {
"_doc" : {
"properties" : {
"suggest" : { //用于自动补全的字段
"type" : "completion"
},
"title" : {
"type": "keyword"
}
}
}
}
}
PUT music/_doc/1?refresh
{
"suggest" : {
"input": [ "Nevermind", "Nirvana" ],
"weight" : 34
}
}
//Input 指定输入词Weight 指定排序值(可选)
PUT music/_doc/1?refresh
{
"suggest" : [
{
"input": "Nevermind",
"weight" : 10
},
{
"input": "Nirvana",
"weight" : 3
}
]}
PUT music/_doc/1?refresh
{
"suggest" : [ "Nevermind", "Nirvana" ]
}
PUT music/_doc/2?refresh
{
"suggest" : {
"input": [ "Nevermind", "Nirvana" ],
"weight" : 20
}
}
POST music/_search?pretty
{
"suggest": {
"song-suggest" : {
"prefix" : "nir",
"completion" : {
"field" : "suggest"
}
}
}
}
POST music/_search?pretty
{
"suggest": {
"song-suggest" : {
"prefix" : "nir",
"completion" : {
"field" : "suggest",
"skip_duplicates": true //去重
}
} }}
PUT music/_doc/3?refresh
{
"suggest" : {
"input": [ "lucene solr", "lucene so cool","lucene elasticsearch" ],
"weight" : 20
}
}
//存的是短语
PUT music/_doc/4?refresh
{
"suggest" : {
"input": ["lucene solr cool","lucene elasticsearch" ],
"weight" : 10
}
}
POST music/_search?pretty
{
"suggest": {
"song-suggest" : {
"prefix" : "lucene s",
"completion" : {
"field" : "suggest" ,
"skip_duplicates": true
}
}
}
}