query - elasticsearch fuzzy matching max_expansions & min_similarity
must match elasticsearch (1)
min_similarity
es un valor entre cero y uno. De los documentos de Lucene:
For example, for a minimumSimilarity of 0.5 a term of the same length
as the query term is considered similar to the query term if the edit
distance between both terms is less than length(term)*0.5
La ''distancia de edición'' a la que se hace referencia es la distancia de Levenshtein .
La forma en que esta consulta funciona internamente es:
- encuentra todos los términos que existen en el índice que podrían coincidir con el término de búsqueda, al tomar en cuenta
min_similarity
- luego busca todos esos términos.
¡Pueden imaginarse cuán pesada podría ser esta consulta!
Para combatir esto, puede establecer el parámetro max_expansions
para especificar el número máximo de términos coincidentes que se deben considerar.
Estoy usando concordancia difusa en mi proyecto principalmente para encontrar errores ortográficos y diferentes deletreos con los mismos nombres. Necesito entender exactamente cómo funciona la coincidencia aproximada de búsqueda elástica y cómo usa los 2 parámetros mencionados en el título.
Como entiendo, min_similarity es un porcentaje por el cual la cadena consultada coincide con la cadena en la base de datos. No pude encontrar una descripción exacta de cómo se calcula este valor.
El max_expansions como lo entiendo es la distancia de Levenshtein por la cual se debe ejecutar una búsqueda. Si esto realmente fuera la distancia de Levenshtein, habría sido la solución ideal para mí. De todos modos, no funciona, por ejemplo, tengo la palabra "Samvel"
queryStr max_expansions matches?
samvel 0 Should not be 0. error (but levenshtein distance can be 0!)
samvel 1 Yes
samvvel 1 Yes
samvvell 1 Yes (but it shouldn''t have)
samvelll 1 Yes (but it shouldn''t have)
saamvelll 1 No (but for some weird reason it matches with Samvelian)
saamvelll anything bigger than 1 No
La documentación dice algo que realmente no entiendo:
Add max_expansions to the fuzzy query allowing to control the maximum number
of terms to match. Default to unbounded (or bounded by the max clause count in
boolean query).
Entonces, por favor, que alguien me explique cómo exactamente estos parámetros afectan los resultados de búsqueda.