Django-全文搜索-通配符 [英] Django - Full text search - Wildcard

查看:191
本文介绍了Django-全文搜索-通配符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以在Django全文搜索中使用通配符?

Is it possible to use wildcards in Django Full text search ?

https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/search/

        post = request.POST.get('search')
        query = SearchQuery(post)
        vector = SearchVector('headline', weight='A') + SearchVector('content', weight='B')
        rank = SearchRank(vector, query, weights=[0.1,0.2])
        data = wiki_entry.objects.annotate(rank=SearchRank(vector,query)).filter(rank__gte=0.1).order_by('-rank')

目前仅匹配完整单词。

诸如*%|这样的字符&没有效果。

Characters like * % | & have no effect.

还是我必须回到icontains吗?

Or do i have to go back to icontains ?

https://docs.djangoproject.com/zh-CN/1.11/ref/models/querysets/#icontains

感谢任何帮助

推荐答案

我扩展了django SearchQuery类,并用 to_tsquery 覆盖 plainto_tsquery 。做一些简单的测试,就可以了。如果发现导致问题的情况,我会回到这里。

I extend the django SearchQuery class and override plainto_tsquery with to_tsquery. Did some simple tests, it works. I will get back here if I find cases where this causes problems.

from django.contrib.postgres.search import SearchQuery

class MySearchQuery(SearchQuery):
    def as_sql(self, compiler, connection):
        params = [self.value]
        if self.config:
            config_sql, config_params = compiler.compile(self.config)
            template = 'to_tsquery({}::regconfig, %s)'.format(config_sql)
            params = config_params + [self.value]
        else:
            template = 'to_tsquery(%s)'
        if self.invert:
            template = '!!({})'.format(template)
        return template, params

现在我可以做类似 query = MySearchQuery('任何:*')

这篇关于Django-全文搜索-通配符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆