2016-09-21 1 views
0

J'ai un index de recherche avec ElasticSearch comme back-end:Django-Haystack (ElasticSearch) Autocomplete donnant des résultats pour substring à la recherche terme

class MySearchIndex(indexes.SearchIndex, indexes.Indexable): 
    ... 
    name = indexes.CharField(model_attr='name') 
    name_auto = indexes.NgramField(model_attr='name') 
    ... 

Supposons que je les valeurs suivantes dans ElasticSearch:

Cable
Magnet
Network
Internet
Switch

Quand je recherche execute 'netw' il est revenu Aimant & Internet également avec Réseau. En utilisant d'autres cas de test, je pense que haystack recherche aussi la sous-chaîne, comme net dans netw comme vous le voyez dans l'exemple ci-dessus.

Voici le code:

sqs = sqs.filter(category='cat_name').using(using) 
querried = sqs.autocomplete(name_auto=q) 

aussi essayé avec:

querried = sqs.autocomplete(name_auto__contains=q) 

Comment puis-je résoudre ce problème et le faire fonctionner pour retourner uniquement les résultats qui contient terme de recherche exacte?

L'utilisation django-botte de foin == == 2.4.1 Django 1.9.1 ElasticSearch == 1.9.0

Répondre

0

Personnalisez vos paramètres de back-end de ElasticSearch avec django-hesab

Les paramètres par défaut de django-Hesab retournera la résultat de recherche exact.