Elasticsearch Fuzzy Search

Elasticsearch Fuzzy Search
Vous êtes-vous déjà demandé comment des outils de moteur de recherche tels que Google peuvent prédire avec précision vos requêtes de recherche lorsque vous tapez? Ou corriger les fautes de frappe dans vos requêtes de recherche? Non, ce n'est pas un raisonnement humain.

Cette fonctionnalité est possible en raison d'un concept appelé logique floue, floue ou recherche floue.

Qu'est-ce que le flou?

La logique floue ou floue fait référence à une logique mathématique qui décrit que la vérité d'une valeur peut être une gamme de nombres entre 0 et 1, où 1 représente la vérité absolue, et 0 représente un faux absolu.

Contrairement à la logique booléenne avec deux valeurs distinctes: 0 et 1, Fuzzy Logic accepte une gamme variable de vérité et de fausseté.

En termes simples, le flou décrit à quel point une valeur peut être claire. Prenez, par exemple, une faute de frappe. Comment savez-vous que c'est une faute de frappe? Vous évaluez les lettres existantes et déterminez ce que le mot essayait de décrire.

Dans la logique floue, nous pouvons l'exprimer dans la plage de 0 et 1. Si une faute de frappe est Helli, il est plus susceptible de décrire bonjour ou l'enfer plutôt que de décrire «humain» ou «tomate."

Recherche floue dans elasticsearch

Une recherche floue trouvera les valeurs correspondantes basées sur la requête initiale basée sur les critères spécifiques.

Elasticsearch met en œuvre le flou à l'aide de l'algorithme de distance d'édition de Levenshtein.

La distance d'édition est le nombre total de variations de mots telles que les modifications, les supprimer, les remplacements ou les transpositions du mot initial pour atteindre un mot cible.

Comment fonctionne la recherche floue elasticsearch

L'algorithme est simple à comprendre. Vous commencez par prendre deux mots et les comparer séquentiellement, caractère par caractère.

Si le personnage est différent, vous incrémentez la distance entre les mots par un. Vous déterminez ensuite la valeur de distance finale entre les lettres.

NOTE: Ce qui précède ne décrit pas la mise en œuvre mathématique de l'algorithme. Considérez le lien

Requête floue elasticsearch

Une requête floue n'est pas très différente d'une requête Elasticsearch ordinaire. Pour l'utiliser, ajoutez le paramètre flou à la requête de recherche.

Vous pouvez également ajouter la distance maximale de Levenshtein à utiliser dans votre requête.

Obtenez kibana_sample_data_ecommerce / _search

"mettre en doute":
"Fuzzy":
"catégorie":
"valeur": "hommes",
"Fuzziness": 0.5



Nous exécutons une requête floue pour faire correspondre les termes «hommes» et définissons une valeur floue personnalisée dans l'exemple ci-dessus.

Vous trouverez ci-dessous un exemple de réponse:

Si vous abaissez la distance d'édition, Elasticsearch limitera la distance de recherche, ce qui entraînera de manquer certaines valeurs.

Par exemple, la requête suivante avec une distance d'édition de 0.2 ne renverra aucun résultat.

Obtenez kibana_sample_data_ecommerce / _search

"mettre en doute":
"Fuzzy":
"catégorie":
"valeur": "hommes",
"Fuzziness": 0.2



La réponse est comme indiqué ci-dessous:

Paramètre Fuzziness Elasticsearch

Comme mentionné, le paramètre flou dans la requête définit la distance d'édition maximale de Levenshtein ou le nombre de modifications.

Nous pouvons spécifier les valeurs floues comme: 0, 1, 2 ou auto.

Lorsque vous définissez manuellement la distance d'édition pour vos requêtes floues, vous pouvez manquer des résultats. Elasticsearch fournit une valeur automatique qui permet à Elasticsearch de déterminer la distance d'édition.

Par exemple:

Obtenez kibana_sample_data_ecommerce / _search

"mettre en doute":
"Fuzzy":
"catégorie":
"valeur": "hommes",
"Fuzziness": "Auto"



Si vous avez la valeur définie sur Auto, Elasticsearch modifiera la distance en fonction de la longueur du terme de recherche. Vous pouvez également spécifier des valeurs faibles et élevées pour l'auto comme:

AUTO:[faible] ou AUTO:[haut]

Pour comprendre comment le flou fonctionne dans Elasticsearch, consultez la documentation.

Requête multi-matchs floue

Vous pouvez utiliser Elasticsearch multi-Quey avec le flou, comme indiqué dans l'exemple de requête ci-dessous:

Obtenez kibana_sample_data_ecommerce / _search

"mettre en doute":
"multi_match":
"requête": "chaussures",
"champs": ["catégorie", "client_first_name"],
"Fuzziness": "Auto"


La réponse est:

Paramètres de recherche floue elasticsearch

Les paramètres de champ et de valeur sont nécessaires lors de l'utilisation de la requête floue dans Elasticsearch. D'autres paramètres tels que le flou sont facultatifs mais peuvent jouer un rôle essentiel dans la requête.

Les autres paramètres comprennent:

max_expansions - Contrôle le nombre de variations créées. Il est défini sur 60 par défaut. Elasticsearch décourage la spécification d'une valeur élevée pour max_expansions car elle peut entraîner de mauvaises performances.

Transpositions - Détermine si la distance d'édition comprend des transpositions de deux caractères adjacents. Cette valeur est définie sur true par défaut.

prefix_length - Cela définit le nombre de caractères initiaux à laisser inchangés pendant l'expansion. Cette valeur est définie sur 0 par défaut.

Récrire - Définit la méthode pour réécrire la requête. La valeur par défaut est définie sur constante_core. Les autres méthodes comprennent:

  1. constant_core_boolean
  2. scoring_boolean
  3. top_terms_boost_n
  4. top_terms_n
  5. top_terms_blend_freqs_n

NOTE: Évitez de changer la méthode de réécriture à moins que vous ne soyez sûr de ce que vous faites.

Conclusion

Elasticsearch est un outil puissant à lui seul. Cependant, comme indiqué dans ce tutoriel, il peut fournir une puissance massive lorsqu'elle est associée à des fonctionnalités telles que des requêtes floues.

Il est bon de noter qu'il y a plus à Elasticsearch Fuzzy Query que discuté dans ce guide. Veuillez considérer la documentation pour en savoir plus.

Merci pour la lecture!