Django Haystack飞快的后端和部分搜索

时间:2012-12-28 23:51:45

标签: django django-haystack

我正在使用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”。

1 个答案:

答案 0 :(得分:6)

尝试使用NgramField代替CharField

它将生成所有可能被编入索引的Ngrams 使用NgramField的缺点是使索引文件变得非常大 我的大小为2MB,只有24个记录。

您可能希望改用EdgeNgramField。它排除了许多可能性。

例如:

数据:'文档'

使用NgramField:
查询:'ocument' 结果:'文档'

使用EdgeNgramField:
查询:'ocument' 结果:无