2011-05-13 44 views
2

我的问题可能有点奇怪,但它一直困扰着我,因为行为不是我所期望的。这里是我的查询:Django Haystack拒绝显示没有结果,即使是荒谬的查询

query = request.GET.get('q','') 
#in search_indexes: 
#start_datetime = indexes.DateTimeField(model_attr='start_datetime',null=True) 
#end_datetime = indexes.DateTimeField(model_attr='end_datetime') 
search_events = SearchQuerySet().models(Event).filter(content=query). 
       filter(end_datetime__gte=datetime.now()). 
       order_by("start_datetime") 

现在我像"asdfasdfjasldf lolol hwtf asdlfka"查询类型,我仍然得到3个结果。 (注意,我只有5个事件开始,不知道这是否会影响任何事情。)我打印出分数,他们是[42,42,42]filter()是否与精确短语匹配?特别是如果我使用报价?

//编辑 我也尝试过使用auto_query,结果是一样的。

我对发生的事情感到困惑,所以希望有人能帮助解决这个问题。提前致谢!

回答

2

原来,我的团队中的其他人将HAYSTACK_DEFAULT_OPERATOR设置为'OR'而不是'AND'。解释一切 - 附加的过滤器标签实际上扩大了结果的数量!

+0

所以你的问题是回答,对不对?随意标记你自己的答案作为正确的答案。 – Ski 2011-05-18 09:59:21

+0

是的,这两天的等待期让我忘记了 – munchybunch 2011-05-22 13:38:45

1

你可能想使用auto_query()进行搜索:

search_events = SearchQuerySet().models(Event) 
           .auto_query(query) 
           .filter(end_datetime__gte=datetime.now()) 
           .order_by("start_datetime") 

它有一些额外的功能,例如像准确的查询检索时的短语是用引号括起来。

+0

我也试过,没有运气。 =/ – munchybunch 2011-05-13 18:28:50