一个好的Django搜索应用?——如何使用Haystack进行模糊搜索?
我现在正在使用django-haystack,后端是apache-solr。
问题是我无法让这个应用程序实现我想要的搜索功能。
在一个词中搜索子部分
比如说,搜索“buntu”却找不到“ubuntu”。
搜索相似的词
比如说,搜索“ubantu”应该能找到“ubuntu”。
任何帮助都将非常感激。
1 个回答
9
这其实是关于你如何把查询传回Haystack(也就是Solr)。在Solr/Lucene中,你可以通过在单词后面加一个~
来进行“模糊”搜索:
ubuntu~
这样可以同时找到buntu
和ubantu
。想了解更多,可以查看Lucene的文档。
通过Haystack传递这个查询的方式,取决于你目前是怎么使用它的。如果你使用的是默认的SearchForm,最好的办法是重写表单的clean_q
方法,在每个搜索结果的单词后面加上波浪号,或者重写search
方法,在把查询传给SearchQuerySet之前做同样的处理。