2017-10-11 4 views
0

Je suis à la recherche d'un moyen de faire correspondre fuzzy contre un champ où les mots sont égaux.ElasticSearch - Correspondance de mots-clés flous

ie. si j'ai un champ avec des valeurs comme ceci: -

foobar 
foobar number2 
barfoo 
barfoo number2 

et je recherche avec fooba Je voudrais revenir seul le document foobar et non foobar number2

Si je recherche avec number2 Je voudrais pas revenir quoi que ce soit que les deux valeurs number2 ont 2 mots.

Je sais qu'une requête à long terme ne peut pas être floue. Est-ce possible avec n'importe quelle requête?

J'utilise ElasticSearch 5.4

Merci

Répondre

0

Après avoir combattu avec ceci pendant 2 jours Je l'ai travaillé après 20 minutes de l'affichage de la question.

Vous devez créer un analyseur personnalisé pour le champ à l'aide du keyword tokenizer: -

"analyzer": { 
    "all_words_analyzer": { 
     "filter": [ 
      "lowercase" 
     ], 
     "type": "custom", 
     "tokenizer": "keyword" 
    } 
} 

Réglez ensuite que sur le terrain: -

"term": { 
    "type": "text", 
    "analyzer": "all_words_analyzer" 
} 

maintenant une correspondance floue normale fonctionnera comme au dessus.

"query": { 
    "fuzzy": { 
     term": { 
      "value": "fooba" 
     } 
    } 
}