我正在使用django haystack 1.27。 我可以搜索。那很棒。但我如何搜索部分词后呢?
例如:
搜索之后:OREM,OR,EM
Word:LOREM
结果:LOREM
search_indexes.py
class NewsIndex(SearchIndex):
text = CharField(document=True, use_template=True)
date = DateTimeField(model_attr='creation_date')
def get_model(self):
return News
def index_queryset(self):
return self.get_model().objects.get_published_models(TOWN, News)
site.register(News, NewsIndex)
views.py
def search(request):
order = self.request.GET.get("order", None)
sqs = SearchQuerySet()
if order:
...
sqs = sqs.order_by(order + "date")
search_template = SearchView(template='general/search.html',
searchqueryset=sqs)(request)
订购并不困难。
我认为搜索索引引擎包含部分搜索:/。 Whoosh是否支持此功能? 我测试过:自动完成功能,但没有“EM”的结果,只是“LOR”。
答案 0 :(得分:6)
尝试使用NgramField
代替CharField
。
它将生成所有可能被编入索引的Ngrams
使用NgramField
的缺点是使索引文件变得非常大
我的大小为2MB,只有24个记录。
您可能希望改用EdgeNgramField
。它排除了许多可能性。
例如:
数据:'文档'
使用NgramField:
查询:'ocument'
结果:'文档'
使用EdgeNgramField:
查询:'ocument'
结果:无