2012-12-20 22 views
2

我正在使用django-haystack v2.0.0-betaWhoosh作爲後端向我的Django應用程序添加搜索功能。創建索引並返回搜索結果到目前爲止工作得很好。現在我想啓用突出顯示功能,但我沒有得到它的工作。Django-haystack:如何在我的設置中啓用突出顯示?

我正在使用高度自定義的安裝程序,對於這種安裝程序,乾草堆文檔不是很有幫助。我的Django應用程序是一個純AJAX應用程序,即客戶端和服務器之間的所有請求都是通過使用jQuery和$.ajax()異步處理的。這就是爲什麼我寫了一個自定義的Django視圖,它可以手動創建乾草堆搜索查詢集並將搜索結果轉儲到JSON對象中。所有這些工作正常,但突出顯示的添加不起作用。這裏是我的代碼,我到目前爲止有:

search_indexes.py

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

    def get_model(self): 
     return CrawledWebpage # This is my Django model 

forms.py

class HaystackSearchForm(forms.Form): 

    q = forms.CharField(
     max_length=100, 
     label='Enter your search query') 

views.py(我採取了一些代碼this post因爲它對我來說看起來很合理,但它可能是錯誤的)

def return_search_results_ajax(request): 
    haystack_search_form = HaystackSearchForm(request.POST) 
    response = {} 

    if haystack_search_form.is_valid(): 
     search_query = haystack_search_form.cleaned_data['q'] 
     sqs = SearchQuerySet().filter(content=search_query) 
     highlighted_search_form = HighlightedSearchForm(request.POST, searchqueryset=sqs, load_all=True) 
     search_results = highlighted_search_form.search() 

     # Here I extract those fields of my model that should be displayed as results 
     webpage_urls = [result.object.url for result in search_results[:10]] 
     response['webpage_urls'] = webpage_urls 

    return HttpResponse(json.dumps(response), mimetype='application/json') 

只要搜索結果正確返回,此代碼工作正常。但是,當我嘗試訪問高亮文本片段的搜索結果,例如針對第一種:

print search_results[0].highlighted 

然後,我總是得到一個空字符串作爲結果:{'text': ['']}

誰能幫我突出顯示功能的工作?非常感謝你提前。

+0

你好!你使用的是乾草堆後端? – Emily

+0

@Emily我使用Whoosh作爲後端。我已經在我原來的帖子中說過了。我知道Whoosh支持突出顯示,所以這不是導致我的問題的錯誤後端。 – pemistahl

+0

對不起,錯過了這個問題。 – Emily

回答

3

看起來這可能是一個草堆錯誤,已經沒有解決了很久:http://github.com/toastdriven/django-haystack/issues/310 http://github.com/toastdriven/django-haystack/issues/273 http://github.com/toastdriven/django-haystack/issues/582

作爲替代方案,你可以使用乾草堆的突出功能,而不是嗖的,以自己突出的結果。例如,一旦你在sqs搜索結果,你可以做

from haystack.utils import Highlighter 
highlighter = Highlighter(search_query) 
print highlighter.highlight(sqs[0].text) 

得到的第一個結果突出顯示的文本。有關文檔,請參見http://django-haystack.readthedocs.org/en/latest/highlighting.html

+0

事實上,我應該首先瀏覽GitHub上的開放問題。那顯然不是我的錯。我剛剛嘗試過Haystack的突出顯示功能,它工作正常。所以我會繼續這樣做。再次,非常感謝,艾米莉! :) – pemistahl

0

我對Haystack不熟悉,但可能是因爲您在一個地方使用HaystackSearchForm而在另一個地方使用HighlightedSearchForm

+0

也許,但我現在不這麼認爲,因爲搜索結果正確地返回。如果你知道一種方法只能用HighlightedSearchForm完成,我很好奇。 – pemistahl

+0

與SearchForm相同,但添加了突出顯示,請閱讀[HighlightedSearchForm](https://django-haystack.readthedocs.org/en/latest/views_and_forms.html?highlight=HighlightedSearchForm#highlightedsearchform)文檔。 – cerberos

+0

你不說。 ;)我已經這樣做了。如果它幫助了我,我不會在這裏問。 – pemistahl

相關問題