好的,这就是我为找出问题出在 Whoosh 还是 Haystack 所做的工作。我打开了 django shell 并搜索了没有出现在 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 around line number 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)
至
#if narrowed_results:
#raw_results.filter(narrowed_results)
然后它就起作用了。SearchQueryAPI 按预期返回测试查询的一个结果。网络搜索工作,但我想知道这里的 haystack 有什么问题。