我按照 https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/lookups/#std:fieldlookup-trigram_similar 上的说明进行操作在我的搜索引擎上安装三元组搜索。我在 settings.py
的 INSTALLED_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/