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分页后查询丢失

使用 Django 的数据表无法从 MySQL 数据库中获取数据

朋友,您好,我想问Django分页后查询条件丢失的问题

完全自定义 django 管理站点

使用 django-autocomplete-light 自动完成

在 Django 中一次提交中执行多个 save() 的最佳方法