Haystack Whoosh没有索引所有内容

4 投票
2 回答
1424 浏览
提问于 2025-04-16 15:04


我正在使用Haystack v1.0和Whoosh v1.8.1为我的网站构建一个定制的搜索引擎。整体运行得很好,但问题是我在索引的模型中有很多条目没有搜索结果。

举个例子,我注册了四个模型:会员、访客、活动和赞助商。在从django shell重建索引时,发生了以下情况:

./manage.py rebuild_index

Indexing 26 members.  
Indexing 3 events.
Indexing <x> guests.  
Indexing <y> sponsors.  

但是在运行SearchQuery API命令和通过搜索页面进行搜索时,我无法搜索到一半的会员名字。我困惑的是,为什么我能搜索到14-15个会员,而其他的却不行。我的模板*_text.txt*文件应该是正确的,因为一半的会员都能被正确索引。

你可以试试这个
http://www.edciitr.com/search/?q=x
x= Vikesh 返回1个结果(这是预期的)
x= Akshit 返回没有结果(这就是问题所在!)

在重建索引之前,'Akshit'和'Vikesh'这两个值都是存在的。这里是我尝试搜索的所有26个会员的列表 - http://www.edciitr.com/contact/

2 个回答

0

我也遇到了类似的问题,这是我在Django django-haystack 在第一次运行时无法从 django-categories 导入 CategoryBase上问的问题。

这可能和你的问题也有关系。

3
#if narrowed_results:
      #raw_results.filter(narrowed_results)

好的,我来告诉你我是怎么判断问题出在Whoosh还是Haystack的。我打开了django的命令行工具,搜索了一个在Haystack的SearchQuery API中没有显示的词:

./manage.py shell   
$>> import whoosh 
$>> from whoosh.query import *  
$>> from whoosh.index import open_dir
$>> ix = open_dir('/home/somedir/my_project/haystack/whoosh/')  
$>> ix.schema  
<Schema: ['branch', 'category', 'coordinator', 'date_event', 'designation','details', 'django_ct', 'django_id'> 'name', 'organisation', 'overview','text', 'title']>
$>> searcher = ix.searcher()  
$>> res = searcher.search(Term('text',u'akshit'))  
$>> print res  
<Top 1 Results for Term('text', 'akshit') runtime=0.000741004943848>
$>> print res['0']['name']  
u'Akshit Khurana'   

从这里可以看出,Whoosh确实把所有数据都正确地建立了索引。那么,我接下来就试试SearchQuery API。

./manage.py shell
 $>> from haystack.query import SearchQuerySet
 $>> sqs = SearchQuerySet().filter(content='akshit')
 $>> sqs
 $>> []

于是,我意识到我得查看一下haystack库里的whoosh_backend.py文件,看看里面发生了什么。打开 - haystack.backends.whoosh_backend,大约在第345行

'''Uncomment 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)

然后它就能正常工作了。SearchQueryAPI对测试查询返回了一个结果,正如我预期的那样。网页搜索也能正常进行,但我还是想知道Haystack这里到底出了什么问题。

撰写回答