[英]Django haystack indexing many to many field but search failing if there are more than one word
[英]Django Haystack Indexing More than one models
我正在嘗試使用Whoosh后端實現Haystack搜索我的網站。 我已經能夠成功設置haystack應用程序,我可以搜索我已注冊的模型,但是當我為另一個應用程序創建search_indexes.py文件時,我遇到以下問題:
我有兩個模型:會員和活動。 我為它們和模板文件夾中的相應/ search / ... _text.txt文件創建了search_indexes.py。 然后我使用./manage.py rebuild_index
我收到以下消息:
Indexing 8 events
Indexing 5 members
但是,我無法看到13個索引項:
$> ./manage.py shell
$> from haystack.query import SearchQuerySet
$> sqs = SearchQuerySet().all()
$> print sqs.count()
$> 8
這些是被索引的8個事件。 因此,從網站上我只能搜索事件,而不是成員。 從“事件”應用程序文件夾中刪除search_indexes.py文件並重做所有內容會正確地為5個成員編制索引,並且可以照常搜索它們。 這可能是什么原因?
更新:我在其他應用程序中包含了search_indexes.py文件,以查看它們是否已正確編入索引。 我在重建索引時收到以下消息:
Indexing 8 events.
Indexing 4 guests.
Indexing 5 members.
Indexing 8 sponsors.
現在,它正在索引所有活動和成員,但沒有客人和贊助商。 我能夠搜索事件和成員,但不能搜索其他兩個(使用SearchQuery API和網站)
更新:問題似乎已通過更改haystack.backends.whoosh_backend
的源來解決。 請看答案
過去幾天我遇到了同樣的問題(很好的時機)。 我決定從你離開的地方開始,看看我是否無法更好地隔離原因。
縮小的結果(至少部分地)通過查詢注冊到站點的模型(L298和之后)生成。 對於我的代碼,它生成的查詢是......
django_ct:(barnaby.tag OR barnaby.userprofile)
...只給出了barnaby.tag模型的結果集。 但是,如果我跑......
django_ct:(barnaby.tag OR barnaby.userprofile) (username:pfrazee OR name:Tag114)
...我最終得到了tag和userprofile的結果。 我只能認為這是Whoosh的一個問題,但我不能肯定地說。 我們應該聯系Haystack和/或關於它。
無論如何,你可以通過設置這個來避免這個問題而不改變haystack:
HAYSTACK_LIMIT_TO_REGISTERED_MODELS = False
好的,所以這就是我所做的,以確定問題是在Whoosh還是Haystack。 我打開了django shell並搜索了在haystack SearchQuery API搜索中沒有顯示的術語:
./manage.py shell
$>> import whoosh
$>> from whoosh.query import *
$>> from whoosh.index import open_dir
$>> ix.schema
<Schema: ['branch', 'category', 'coordinator', 'date_event', 'designation','details', 'django_ct', 'django_id'> 'name', 'organisation', 'overview','text', 'title']>
$>> ix = open_dir('/home/somedir/my_project/haystack/whoosh/')
$>> searcher = ix.searcher()
$>> res = ix.search(Term('text',u'pink'))
$>> print res
<Top 1 Results for Term('text', 'pink') runtime=0.000741004943848>
$>> print res['0']['name']
u'Pink Floyd'
所以你看,Whoosh正確索引所有數據。 所以,現在我嘗試使用SearchQuery API
./manage.py shell
$>> from haystack.query import SearchQuerySet
$>> sqs = SearchQuerySet().filter(content='pink')
$>> sqs
$>> []
所以,我意識到我必須查看haystack庫的whoosh_backend.py文件,看看發生了什么。 打開 - haystack.backends.whoosh_backend around line number 345
'''Comment these two lines because the raw_results set becomes empty after the filter call for some queries'''
if narrowed_results:
raw_results.filter(narrowed_results)
至
#if narrowed_results:
#raw_results.filter(narrowed_results)
然后它的工作原理。 SearchQueryAPI按預期返回測試查詢的一個結果。 網絡搜索工作。 甜蜜睡眠的時間,雖然我想知道這里干草堆的問題是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.