2016-09-21 62 views
0

我有elasticsearch搜索索引作为后端:Django的草堆(elasticsearch)自动完成给子字符串导致搜索词

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

假设我有在elasticsearch以下值:

Cable
Magnet
Network
Internet
Switch

当我执行搜索 'NETW',它返回磁铁 & 互联网也随之网络。使用其他一些测试用例,我认为干草堆也在搜索子字符串,如net in netw正如您在上例中看到的那样。

下面是代码:

querried = sqs.autocomplete(name_auto__contains=q) 

我怎样才能解决这个并使其工作只返回包含精确的搜索词的结果:

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

与也试过?

使用Django,草垛== 2.4.1 Django的== 1.9.1 elasticsearch == 1.9.0

回答

0

django-hesab

自定义您的elasticsearch后端设置Django的hesab的默认设置将返回确切的搜索结果。