Django trigram_similar搜索没有返回结果(带有Postgresql 10.5后端的Django 2.1)

问题描述 投票:0回答: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搜索什么都没有返回?

django postgresql trigram
1个回答
1
投票

问题是Postgres的默认相似性阈值设置为0.3,这对我的案例中的单字搜索返回结果来说太高了。在我的情况下,我发现0.01的阈值是有效的:

articles = articles.annotate(similarity=TrigramSimilarity('Title', search_term),).filter(similarity__gt=0.01).order_by('-similarity')
© www.soinside.com 2019 - 2024. All rights reserved.