query fuzziness lucene elasticsearch fuzzy-search

lucene - fuzziness - Consulta difusa de ElasticSearch



kibana search regex (1)

1.

La consulta difusa opera en términos No puede manejar frases porque no analiza el texto. Entonces, en su ejemplo, elasticsearch intenta hacer coincidir el término "fútbol americano" con el término americano y con el término fútbol. La coincidencia entre los términos se basa en la distancia Levenshtein , que se utiliza para calcular la puntuación de similitud . Dado que tiene min_similarity = 0.0, cualquier término debe coincidir con cualquier término siempre que la distancia de edición sea menor que el tamaño del término más pequeño. En su caso, el término "fútbol americano" tiene el tamaño 17 y el término "americano" tiene el tamaño 8. La distancia entre estos dos términos es 9, que es más grande que el tamaño del término más pequeño 8. Así que, como resultado, este El término se está rechazando. La distancia de edición entre "americano footb" y "americano" es 6. Es básicamente el término "americano" con 6 adiciones al final. Es por eso que produce resultados. Con min_similarity = 0.0 casi cualquier cosa con una distancia de edición de 7 o menos coincidirá. Incluso obtendrá resultados mientras busca "aqqqqqq", por ejemplo.

2.

Sí, como expliqué anteriormente, está algo relacionado con valores de varias palabras. Si desea buscar varios términos, consulte el parámetro Fuzzy Like This Query and fuzziness de Text Query

4 y 5.

Generalmente, la siguiente mejor fuente de información después de elasticsearch.org es el código fuente de elasticsearch.

Soy nuevo en ElasticSearch y actualmente estoy explorando sus características. Uno de ellos en el que estoy interesado es en Fuzzy Query , que estoy probando y tengo problemas para usar. Probablemente sea una pregunta falsa, así que supongo que alguien que ya haya usado esta función encontrará rápidamente la respuesta, al menos eso espero. :)

Por cierto, tengo la sensación de que podría no estar relacionado solo con ElasticSearch, sino tal vez directamente con Lucene .

Comencemos con un nuevo índice llamado "primer índice" en el que almaceno un objeto "etiqueta" con valor "fútbol americano". Esta es la consulta que utilizo.

bash-3.2$ curl -XPOST ''http://localhost:9200/firstindex/node/?pretty=true'' -d ''{ "node" : { "label" : "american football" } } ''

Este es el resultado que obtengo.

{ "ok" : true, "_index" : "firstindex", "_type" : "node", "_id" : "6TXNrLSESYepXPpFWjpl1A", "_version" : 1 }

Hasta ahora todo bien, ahora quiero encontrar esta entrada utilizando una consulta difusa. Este es el que yo envío:

bash-3.2$ curl -XGET ''http://localhost:9200/firstindex/node/_search?pretty=true'' -d ''{ "query" : { "fuzzy" : { "label" : { "value" : "american football", "boost" : 1.0, "min_similarity" : 0.0, "prefix_length" : 0 } } } } ''

Y este es el resultado que obtengo.

{ "took" : 15, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 0, "max_score" : null, "hits" : [ ] } }

Como puedes ver, ningún golpe. Pero ahora, cuando reduzco un poco el valor de mi consulta de " fútbol americano" a " pie americano" de esta manera:

bash-3.2$ curl -XGET ''http://localhost:9200/firstindex/node/_search?pretty=true'' -d '' { "query" : { "fuzzy" : { "label" : { "value" : "american footb", "boost" : 1.0, "min_similarity" : 0.0, "prefix_length" : 0 } } } } ''

Entonces recibo un golpe correcto en mi entrada, por lo que el resultado es:

{ "took" : 0, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 0.19178301, "hits" : [ { "_index" : "firstindex", "_type" : "node", "_id" : "6TXNrLSESYepXPpFWjpl1A", "_score" : 0.19178301, "_source" : { "node" : { "label" : "american football" } } } ] } }

Entonces, tengo varias preguntas relacionadas con esta prueba:

  1. Por qué no obtuve ningún resultado al realizar una consulta con un valor completamente igual a mi única entrada " fútbol americano"

  2. ¿Está relacionado con el hecho de que tengo un valor de palabras múltiples?

  3. ¿Hay alguna forma de obtener la puntuación de "similitud" en el resultado de mi consulta para que pueda entender mejor cómo encontrar el umbral correcto para mis consultas difusas?

  4. Hay una página dedicada a Fuzzy Query en el sitio web de ElasticSearch, pero no estoy seguro de que enumere todos los parámetros potenciales que pueda usar para la consulta difusa. ¿Podré encontrar una lista tan exhaustiva?

  5. La misma pregunta para las otras consultas en realidad.

  6. ¿Hay alguna diferencia entre una consulta difusa y una consulta de cadena de consulta que utiliza la sintaxis de Lucene para obtener una coincidencia aproximada?