【发布时间】:2020-01-11 13:07:11
【问题描述】:
我正在使用 Django 的内置 trigram_similar 查找和 TrigramSimilarity 类来使用 PostgreSQL 数据库创建模糊搜索。这样,我过滤文章的标题。问题是,这个过滤器基于整个标题。我也想在标题部分过滤它。
示例:
文章标题:“我们就是世界 | 这是有史以来最好的文章”。
我的搜索:“我们”
在这个例子中,我的函数没有返回任何内容,但我希望它返回这篇文章。我该怎么做?
这是我使用的代码:
def search(qs, term, fields=["title"], treshold=.3):
if len(fields) >= 2:
return qs.annotate(
similarity=Greatest(
*[TrigramSimilarity(field, term) for field in fields]
)
).filter(similarity__gte=treshold).order_by("-similarity")
return qs.filter(
**{"{}__trigram_similar".format(fields[0]): term}
)
【问题讨论】:
-
PosgreSQL 的最新版本提供了单词相似度函数(> 或 >>)。所以这只是让Django暴露它的问题,我不知道。
标签: python django postgresql fuzzy-search django-postgresql