2017-02-13 62 views
0

我正在研究一個基於django 1.8和搜索引擎django-haystack 2.4.1的應用程序。 一個奇怪的情況,因爲當我搜索單詞"New York" - 一切正常。 例如,當事件名稱中有一個奇怪的名稱時。 "Zo-zo on"(帶破折號)搜索不顯示正確的結果,只有頁面隔離字母實例,例如:"zo ..."破折號的名稱在django-haystack中不起作用

我發的rebuild_index

class EventIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.EdgeNgramField(document=True, use_template=True) 
    id = indexes.CharField(model_attr='id') 
    get_absolute_url = indexes.CharField(model_attr='get_absolute_url') 
    description = indexes.CharField(model_attr='description', null=True) 
    is_past = indexes.CharField(model_attr='is_past', default='false') 
    date_start = indexes.DateTimeField(model_attr='date_start') 

    def get_model(self): 
     return Booking 

    def index_queryset(self, using=None): 
     date_past = now() - timedelta(days=1) 
     return self.get_model().published.filter(date_start__gt=date_past).filter(id=7353) 

    def read_queryset(self, using=None): 
     return self.get_model().all_objects.all() 
+0

你可以分享你的searchIndex模式對應的相同。 –

+0

@BipulJain你的意思是代碼? – mark

+0

是的。你必須有具體的searchIndex search_indexes.py –

回答

1

ok基於您的搜索索引架構。您正在使用EdgeNGramField,它將您給它的所有內容標記爲大小爲2或更多的標記。

對於例如:如果你紐約將記號化,並確保您的文檔符合條件像NE,新,喲,尤爾和約克。 EdgeNGram字段通常用於自動提示,因爲它在查詢和索引時將它標記爲這種形式的單詞。

您可以將模式更改爲CharField。這樣它會zo-zo將轉換爲zo zo這將匹配Zo-zo在您的索引

class EventIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 

按照您的意圖進行匹配。它只會以這種方式支持確切的單詞匹配。

如果您打算保留EdgeNGram字段,請創建一個獨立字段。

+0

非常感謝你的amswer。請你能告訴我如何在模型中使用CharField和EdgeNGramField?我需要EdgeNGramField。我試過'text_1 = indexes.CharField(document = True,use_template = True)',但我只能用'document = True'來設置一個字段 – mark

相關問題