让我说我在搜索索引中有这个字符串'美发师做得很好'的记录。
如何在奥克兰进行搜索查询'美发师'仍然会在搜索结果中返回上述记录?
我试过了,但我觉得这不是正确的做法:
for word in query.split(' '):
result = SearchQuerySet().filter_or(content=word)
而且我不想使用SOLR我觉得安装SOLR只是为了解决这种不会一直发生的搜索,这太过分了。
答案 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能够搜索丢弃查询中单词的顺序,但如果搜索查询中包含索引中不存在的单词,则无法匹配任何内容。