2

我按照https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/lookups/#std:fieldlookup-trigram_similar上的说明在我的搜索引擎上安装三元组搜索。我在我的 in 中添加'django.contrib.postgres'INSTALLED_APPS在我的PostgreSQL 数据库上settings.py安装了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)  

TitleCharField在我的模型中是一个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') 

出现了很多结果。知道为什么我的三元组搜索什么都不返回吗?

4

1 回答 1

3

问题是 Postgres 的默认相似度阈值设置为 0.3,在我的情况下,该阈值太高而无法返回单个单词搜索的结果。我发现 0.01 的阈值在我的情况下是有效的:

articles = articles.annotate(similarity=TrigramSimilarity('Title', search_term),).filter(similarity__gt=0.01).order_by('-similarity')
于 2019-01-22T14:05:41.877 回答