2016-09-21 63 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的默認設置將返回確切的搜索結果。