Django trigram_similar搜索没有返回结果(带有Postgresql 10.5后端的Django 2.1)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django trigram_similar搜索没有返回结果(带有Postgresql 10.5后端的Django 2.1)相关的知识,希望对你有一定的参考价值。
我按照https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/lookups/#std:fieldlookup-trigram_similar上的说明在我的搜索引擎上安装了trigram搜索。我在'django.contrib.postgres'
的INSTALLED_APPS
中添加了settings.py
,并在我的PostgreSQL数据库上安装了pg_trgm
扩展。 trigram搜索没有返回任何结果,但没有错误,只有应该有搜索结果的空白。我的搜索引擎在icontain
搜索中运行良好。以下是trigram_similar
搜索引擎的代码:
def query_search(request):
articles = cross_currents.objects.all()
search_term = ''
if 'keyword' in request.GET:
search_term = request.GET['keyword']
articles = articles.filter(Title__trigram_similar=search_term)
Title
是我的模型CharField
中的cross_currents
:
class cross_currents(models.Model):
Title = models.CharField(max_length=500)
这就是我的Django shell给我的东西:
In [6]: cross_currents.objects.filter(Title__trigram_similar='modern')
Out[6]: <QuerySet []>
html页面也不返回任何内容。但是,当我这样做的时候
cross_currents.objects.filter(Title__icontains='modern')
许多结果出现了。知道为什么我的trigram搜索什么都没有返回?
问题是Postgres的默认相似性阈值设置为0.3,这对我的案例中的单字搜索返回结果来说太高了。在我的情况下,我发现0.01的阈值是有效的:
articles = articles.annotate(similarity=TrigramSimilarity('Title', search_term),).filter(similarity__gt=0.01).order_by('-similarity')
以上是关于Django trigram_similar搜索没有返回结果(带有Postgresql 10.5后端的Django 2.1)的主要内容,如果未能解决你的问题,请参考以下文章
使用 Django 的数据表无法从 MySQL 数据库中获取数据