Haystack Whoosh没有索引所有内容
我正在使用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 个回答
我也遇到了类似的问题,这是我在Django django-haystack 在第一次运行时无法从 django-categories 导入 CategoryBase上问的问题。
这可能和你的问题也有关系。
#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这里到底出了什么问题。