簡體   English   中英

Django Haystack索引不止一個型號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM