4


我正在使用 Haystack v1.0 和 Whoosh v1.8.1 为我的网站构建自定义搜索引擎。一切都很顺利,但问题是我的索引模型中的很多条目都没有结果。

例如 - 我有四个注册模型 - 会员、客人、活动、赞助商。在从 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/

4

2 回答 2

3

好的,这就是我为找出问题出在 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 有什么问题。

于 2011-04-05T07:11:28.957 回答
0

我有类似的症状,这是我在第一次运行时问Django django-haystack cannot import CategoryBase from django-categories

也可能与您的问题有关。

于 2013-08-12T22:32:07.677 回答