Esta funcionalidad es posible debido a un concepto llamado lógica difusa, confusión o búsqueda difusa.
Que es la confusión?
La lógica confusa o la lógica difusa se refiere a una lógica matemática que describe que la verdad de un valor puede ser un rango de números entre 0 y 1, donde 1 representa la verdad absoluta, y 0 representa el falso absoluto.
A diferencia de la lógica booleana con dos valores distintos: 0 y 1, la lógica difusa acepta un rango variable de verdad y falso.
En términos simples, la confusa describe qué tan claro puede ser un valor. Tomar, por ejemplo, un error tipográfico. ¿Cómo sabes que es un error tipográfico?? Usted evalúa las letras existentes y determina qué estaba tratando de describir la palabra.
En Logic Fuzzy, podemos expresar esto en el rango de 0 y 1. Si un error tipográfico es infernal, es más probable que describe hola o infierno en lugar de describir "humano" o "tomate."
Búsqueda difusa en elasticsearch
Una búsqueda difusa encontrará los valores coincidentes basados en la consulta inicial basada en los criterios específicos.
Elasticsearch implementa la confusión utilizando el algoritmo de distancia de edición de Levenshtein.
La distancia de edición es el número total de variaciones de palabras, como ediciones, eliminaciones, reemplazos o transposiciones de la palabra inicial para llegar a una palabra de destino.
Cómo funciona la búsqueda de elasticsearch fuzzy
El algoritmo es fácil de entender. Empiezas tomando dos palabras y comparándolas secuencialmente, carácter por carácter.
Si el personaje es diferente, aumenta la distancia entre las palabras por uno. Luego determina el valor de distancia final entre las letras.
NOTA: Lo anterior no describe la implementación matemática del algoritmo. Considere el enlace
Elasticsearch fuzzy consulta
Una consulta difusa no es muy diferente de una consulta regular Elasticsearch. Para usarlo, agregue el parámetro de confuso a la consulta de búsqueda.
También puede agregar la distancia máxima de Levenshtein para usar en su consulta.
Obtener kibana_sample_data_ecommerce/_searchEjecutamos una consulta difusa para que coincida con los términos "hombres" y establezcamos un valor de confusión personalizado en el ejemplo anterior.
A continuación se muestra una respuesta de ejemplo:
Si baja la distancia de edición, ElasticSearch limitará la distancia de búsqueda, lo que conducirá a faltar algunos valores.
Por ejemplo, la siguiente consulta con una distancia de edición de 0.2 no devolverán resultados.
Obtener kibana_sample_data_ecommerce/_searchLa respuesta es como se muestra a continuación:
Parámetro de fuzziness de elasticsearch
Como se mencionó, el parámetro de confusión en la consulta establece la distancia máxima de edición de Levenshtein o el número de ediciones.
Podemos especificar los valores de confusión como: 0, 1, 2 o automáticamente.
Cuando establezca manualmente la distancia de edición para sus consultas difusas, puede perder algunos resultados. Elasticsearch proporciona un valor automático que permite a Elasticsearch determinar la distancia de edición.
Por ejemplo:
Obtener kibana_sample_data_ecommerce/_searchSi tiene el valor establecido en Auto, ElasticSearch editará la distancia en función de la longitud del término de búsqueda. También puede especificar valores bajos y altos para Auto como:
AUTO:[bajo] o AUTO:[alto]
Para comprender cómo funciona la confusión en Elasticsearch, consulte la documentación.
Consulta de múltiples partidos difusos
Puede usar Elasticsearch Multi-Query con Fuzziness, como se muestra en la consulta de ejemplo a continuación:
Obtener kibana_sample_data_ecommerce/_searchLa respuesta para esto es:
Parámetros de búsqueda de elasticsearch fuzzy
Los parámetros de campo y valor son necesarios cuando se usa la consulta difusa en Elasticsearch. Otros parámetros, como la confusión, son opcionales, pero pueden desempeñar un papel esencial en la consulta.
Otros parámetros incluyen:
Max_ExPansions - Controla el número de variaciones creadas. Está configurado en 60 por defecto. Elasticsearch desalienta la especificación de un alto valor para max_expansions, ya que puede conducir a un bajo rendimiento.
Transposiciones - Determina si la distancia de edición incluye transposiciones de dos caracteres adyacentes. Este valor se establece en verdadero de forma predeterminada.
prefix_length - Esto establece el número de caracteres iniciales para dejar inalterado durante la expansión. Este valor se establece en 0 por defecto.
Volver a escribir - Establece el método para reescribir la consulta. El valor predeterminado se establece en constant_core. Otros métodos incluyen:
NOTA: Evite cambiar el método de reescritura a menos que esté seguro de lo que está haciendo.
Conclusión
Elasticsearch es una herramienta poderosa por sí sola. Sin embargo, como se muestra en este tutorial, puede proporcionar una potencia masiva cuando se combina con características como consultas difusas.
Es bueno tener en cuenta que la consulta Fuzzy de Elasticsearch Fuzzy. Considere la documentación para obtener más información.
Gracias por leer!