Django trigram_similar 搜索未返回结果(Django 2.1 和 Postgresql 10.5 后端)

标签 django postgresql trigram

我按照 https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/lookups/#std:fieldlookup-trigram_similar 上的说明进行操作在我的搜索引擎上安装三元组搜索。我在 settings.pyINSTALLED_APPS 中添加了 'django.contrib.postgres' 并安装了 pg_trgm 扩展我的 PostgreSQL 数据库。三元组搜索没有返回结果,但也没有错误,只是在应该有搜索结果的地方一片空白。我的搜索引擎在 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 是我的模型 cross_currents 中的 CharField:

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') 

显示了许多结果。知道为什么我的三元组搜索没有返回任何结果吗?

最佳答案

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

articles = articles.annotate(similarity=TrigramSimilarity('Title', search_term),).filter(similarity__gt=0.01).order_by('-similarity')

关于Django trigram_similar 搜索未返回结果(Django 2.1 和 Postgresql 10.5 后端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54276649/

相关文章:

sql - 批量插入表时优化索引更新速度

sql - Postgresql 位图堆扫描速度慢

sql - 为什么 postgres trigram word_similarity 函数不使用 Gin 索引?

python - Django,ImportError : cannot import name Celery, 可能的循环导入?

django - Rel.to 在 Django 2.0 中弃用

python - 包含 # 的 Django URL 模式

java - 具有复合 PK 的 OneToOne 以及来自相关表的列

postgresql - SSIS:SQL server 2008 R2 到 PostgreSQL 9.5 之间的数据集成

sql - Postgres Select ILIKE %text% 在大字符串行上很慢

python - AsyncResult(task_id) 即使在任务开始后也返回 "PENDING"状态