2016-08-27 2 views
6

J'utilise elasticsearch achèvement suggérer ces jours-là, et a eu un certain problème que cela produit toujours des résultats similaires.elasticsearch achèvement suggérer produire des résultats en double

recherche Indiquez I avec la déclaration suivante:

"my_suggestion": { 
>   "text": "ni", 
>   "completion": { 
>    "field": "my_name_for_sug" 
>   } 
>  } 

et obtenir les résultats suivants:

"my_suggestion" : [ { 
    "text" : "ni", 
    "offset" : 0, 
    "length" : 2, 
    "options" : [ { 
     "text" : "Nine West", 
     "score" : 329.0 
    }, { 
     "text" : "Nine West ", 
     "score" : 329.0 
    }, { 
     "text" : "Nike", 
     "score" : 295.0 
    }, { 
     "text" : "NINE WEST", 
     "score" : 168.0 
    }, { 
     "text" : "NINE WEST ", 
     "score" : 168.0 
    } ] 
    } ], 

La question est de savoir comment puis-je fusionner ou regrouper les mêmes résultats comme "NINE WEST" et "NEUF OUEST".

la mise en correspondance est:

"my_name_for_sug": { 
     "type": "completion" 
     ,"analyzer": "ik_max_word" 
     ,"search_analyzer": "ik_max_word" 
     ,"payloads": true 
     ,"preserve_separators": false 
    } 

ik_max_word est un analyseur spécifique-chinois, et il peut faire le travail de l'analyseur standard.

Merci

Répondre

0

élastique Suggesters automatiquement de-double même sortie (au moins jusqu'à ce 2.x). Je n'ai pas encore essayé 5.x, et il y a quelques changements dans les suggestions ici. Le problème semble être votre analyseur d'index, qui indexe vos documents de sorte que:

"text" : "Nine West", "text" : "Nine West ", "text" : "NINE WEST", "text" : "NINE WEST ", ne sont pas exactement les mêmes. Vous devez les indexer à l'aide d'un analyseur qui met en minuscules les jetons, et supprime les espaces supplémentaires, etc. Une fois que vous faites cela, vous devriez obtenir une sortie dédupliquée pour les suggestions, comme vous le souhaitez.