我正在使用 Haystack v1.0 和 Whoosh v1.8.1 为我的网站构建自定义搜索引擎。一切都很好,但问题是我的索引模型中的很多条目都没有结果。
例如- 我有四个注册模型 - 成员(member)、嘉宾、事件、赞助商。从 django shell 重建索引时,会发生以下情况:
./manage.py 重建索引
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”这两个值在 rebuild_index 之前都存在。这是我要搜索的所有 26 个成员的列表 - http://www.edciitr.com/contact/
最佳答案
好的,下面是我为查明问题出在 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 这里有什么问题。
关于python - Haystack Whoosh 没有索引所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5543050/