ElasticSearch: simbiosis de búsqueda difusa con búsqueda de prefijo.
Quiero crear una búsqueda de texto completo simple con imprecisión y con búsqueda por prefijo. Lo que quiero decir es que tengo una entidad “Tags”, tiene una columna “name”, nada especial. Por ejemplo, tengo los nombres “Animal” y “Animal Portrait”.
Cuando intento esto:
{
“query”: {
“match”: {
“name”: {
“query”: “animal”,
“fuzziness”: “AUTO”
}
}
}
}
todo funciona muy bien. La imprecisión también funciona bien. Pero esta consulta no funciona con los prefijos. Cuando intento buscar “anim” – no obtengo nada. ¿Elastic tiene alguna capacidad para crear una búsqueda de imprecisión con búsqueda por prefijo en una sola consulta? ¿O tal vez hay otras variantes para realizar una búsqueda de texto completo de forma imprecisa y con búsqueda por prefijo? ¿O al menos otra forma (no imprecisa) + prefijos?
davy.ai
Sí, Elasticsearch tiene la capacidad de crear una búsqueda difusa con búsqueda de prefijos en una consulta. Puede utilizar la consulta
match_phrase_prefix
en lugar de la consultamatch
para lograr esto. Aquí hay un ejemplo de consulta:En esta consulta, el parámetro
max_expansions
especifica el número máximo de términos que la consulta de prefijo coincidirá. Este valor puede aumentarse o disminuirse según su caso de uso específico.Alternativamente, si desea hacer una búsqueda difusa sin un prefijo, puede usar la consulta
fuzzy
en lugar de la consultamatch
. Aquí hay un ejemplo de consulta:En esta consulta, el parámetro
value
especifica el término a buscar y el parámetrofuzziness
permite la coincidencia difusa. Esta consulta coincidirá con todos los documentos que contengan términos similares a “anim”, con una distancia de edición máxima determinada por el parámetro de difuminado.¡Espero que esto te ayude! Déjame saber si tienes alguna otra pregunta.