query_string query must multiple multi fuzziness fields example elasticsearch fuzzy-search fuzzy-logic fuzzy-comparison

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.