我的问题可能有点奇怪,但由于行为不符合我的预期,所以一直困扰着我。这是我的疑问:
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
,结果是一样的。
我对发生的事情感到很困惑,所以希望有人可以帮忙解决这个问题。提前谢谢!
答案 0 :(得分:2)
原来我团队中的其他人已将HAYSTACK_DEFAULT_OPERATOR设置为'OR'而不是'AND'。解释所有内容 - 额外的过滤器标签实际上是在扩展结果数量!
答案 1 :(得分:1)
您可能希望使用auto_query()
执行搜索:
search_events = SearchQuerySet().models(Event)
.auto_query(query)
.filter(end_datetime__gte=datetime.now())
.order_by("start_datetime")
它有一些额外的功能,例如当短语用引号括起来时的精确查询搜索。