2013-11-22 45 views
0

我正在理解乾草堆搜索的工作原理。Haystack +搜索字符串中的數字和特殊字符飛快移動

我哈瓦模型訂單與現場Order.no其中順序號被存儲在一個表格「ABC /11分之2013/ 1」,「ABC /十一分之二千〇十三/ 2」 ...

我希望使用帶有Whoosh後端的Haystack(django-haystack 2.1.0,celery-haystack 0.7.2,whoosh 2.5.5,Django 1.6)在此字段上實現自動完成功能。我search_index.py看起來是這樣的:

class OrderIndex(CelerySearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    name_auto = indexes.EdgeNgramField(model_attr='name') 

    def get_model(self): 
     return Order 

當我嘗試

SearchQuerySet().autocomplete(name_auto='ABC/2013') 

我收到兩個ABC /11分之2013/ 1和ABC /十一分之二千○一十三/ 2和它的確定

當我嘗試

SearchQuerySet().autocomplete(name_auto='ABC/2013/11') 

我還收到兩個ABC /十一分之二千零十三/ 1和ABC /十一分之二千○一十三/ 2,它也OK 但是當我TR y

SearchQuerySet().autocomplete(name_auto='ABC/2013/11/1') 

我還是收到ABC/2013/11/1和ABC/2013/11/2我不明白爲什麼。

我也注意到,當我將數字格式更改爲「1/ABC /十分之二千零十三」整個項目...查詢像

SearchQuerySet().autocomplete(name_auto='1/') 

不返回任何結果和查詢一樣

SearchQuerySet().autocomplete(name_auto='1/ABC') 

返回'1/ABC/2013/10'和'2/ABC/2013/10'。

也許我錯過了與Haystack查詢/搜索字符串中的數字和/或特殊字符相關的內容。謝謝你的幫助。

回答

0

其原因實際上是雙重的:首先是正斜槓(「/」)是在Whoosh中的保留字符,因此它被忽略。其次是Whoosh也忽略了單個字符的搜索條件。

所以您的查詢,

'ABC/2013/11/1' 

如果剝去斜線,

'ABC 2013 11 1' 

,然後單個字符,

'ABC 2013 11' 

看起來就像如果你正在尋找

'ABC/2013/11' -> 'ABC 2013 11' 

有趣的文件似乎是對這種奇怪的行爲媽咪。