Django Haystack飞快的标记搜索

时间:2013-07-28 19:34:25

标签: django tokenize django-haystack whoosh

让我说我在搜索索引中有这个字符串'美发师做得很好'的记录。

如何在奥克兰进行搜索查询'美发师'仍然会在搜索结果中返回上述记录?

我试过了,但我觉得这不是正确的做法:

for word in query.split(' '):
  result = SearchQuerySet().filter_or(content=word)

而且我不想使用SOLR我觉得安装SOLR只是为了解决这种不会一直发生的搜索,这太过分了。

2 个答案:

答案 0 :(得分:0)

另一种更干的方法是指定自己的input type来处理将字符串转换为一系列或过滤器。您还可以使用Raw输入类型传递特定于Whoosh的查询。

如果你只需要在几个地方使用它,我会坚持你现在的方式。否则我会为它指定一个输入类型。

编辑:Whoosh的默认解析器使用简单的boolean operators。正如您在文档中看到的,默认运算符是AND。要获得Whoosh的正确查询,只需执行以下操作:

query = ' OR '.join(query.split(' '))
result = SearchQuerySet().filter(content=Raw(Clean(query)))

Clean自动转义输入以防止恶意代码注入。

答案 1 :(得分:0)

我设法通过使用auto_query()

来实现这一目标

whoosh或xapian能够搜索丢弃查询中单词的顺序,但如果搜索查询中包含索引中不存在的单词,则无法匹配任何内容。