Django-全文搜索-通配符 [英] Django - Full text search - Wildcard
本文介绍了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屋!
查看全文