Notas del estudio de Elasticsearch (cinco) Suplemento de búsqueda detallado Sugerir- sugerencias de consulta

Tabla de contenido

Introducción a la sugerencia de consulta

¿Cuál es la sugerencia de consulta?

API de consulta sugerida en ES

Introducción al sugeridor

Sugestor de términos

sugerente de frases

Finalización de sugerencia de finalización automática


Introducción a la sugerencia de consulta

¿Cuál es la sugerencia de consulta?

Consultar sugerencias para brindar a los usuarios una buena experiencia. Incluye principalmente: revisión ortográfica; sugerir automáticamente palabras de consulta (finalización automática)

API de consulta sugerida en ES

La sugerencia de consulta también utiliza la dirección de punto final _search. Utilice el nodo de sugerencia en el DSL para definir la consulta de sugerencia requerida.

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

Varias consultas sugeridas pueden usar texto de consulta global

POST _search
{
  "suggest": {
    "text" : "tring out Elasticsearch",
    "my-suggest-1" : {
      "term" : {
        "field" : "message"
      }
    },
    "my-suggest-2" : {
       "term" : {
        "field" : "user"
       }
    }
  }
}

Introducción al sugeridor

Sugestor de términos

El término sugerencia implementa la segmentación de palabras del texto de entrada y proporciona sugerencias de términos para consultas difusas de cada palabra. Las palabras sugeridas no se proporcionan de forma predeterminada para las palabras que existen en el índice, y se selecciona un cierto número de palabras sugeridas después de ordenarlas según los resultados de la consulta difusa para las palabras inexistentes.

Opciones comúnmente recomendadas:

 

texto 

Especificar texto de búsqueda

campo 

Obtener el campo de búsqueda de palabras sugeridas

analizador 

Tokenizador designado

Talla 

Número máximo de palabras sugeridas devueltas por palabra 

clasificar 

Cómo ordenar las palabras sugeridas, opciones disponibles:

Puntuación: primero ordene por puntuación, luego ordene por frecuencia de documentos y orden de términos;

frecuencia: primero ordene por frecuencia del documento y luego ordene por puntaje y término.

modo_sugerencia 

Modo de sugerencia, que controla la forma de sugerir palabras:

faltante: las palabras sugeridas se proporcionan solo cuando el término de búsqueda no existe en el índice, el valor predeterminado;

popular: solo sugiera palabras con una frecuencia de documento más alta que el término de búsqueda. 

siempre: siempre proporcione sugerencias de coincidencia.

sugerente de frases

La sugerencia de frase, basada en el término, considerará la relación entre varios términos, como si aparecen en el texto original del índice al mismo tiempo, el grado de adyacencia y la frecuencia de las palabras, etc.

POST /ftq/_search
{
  "query": {
    "match_all": {}
  },
  
  "suggest" : {
    "myss":{
      "text": "java sprin boot",
      "phrase": {
        "field": "title"
      }
    }
  }
}

Finalización de sugerencia de finalización automática

Un dispositivo de sugerencia diseñado para la finalización automática de escenas. En este escenario, cada vez que el usuario ingresa un carácter, necesita enviar una solicitud de consulta al back-end para encontrar un elemento coincidente inmediatamente. Cuando la velocidad de entrada del usuario es alta, la velocidad de respuesta del back-end es más exigente. Por lo tanto, en términos de implementación, utiliza una estructura de datos diferente a los dos Suggesters anteriores. El índice no se completa invirtiendo, sino que los datos analizados se codifican en FST y se almacenan junto con el índice. Para un índice en el estado abierto, el ES cargará el FST en la memoria y la búsqueda de prefijo es extremadamente rápida. Pero FST solo se puede utilizar para la búsqueda de prefijos, que también es la limitación de Completion Suggester.

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html

Para utilizar la finalización automática, los campos del índice que se utilizan para proporcionar sugerencias de finalización deben estar especialmente diseñados y el tipo de campo es finalización.

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

 

Supongo que te gusta

Origin blog.csdn.net/qq_34050399/article/details/113111805
Recomendado
Clasificación