【问题标题】:Django PostgreSQL - Fuzzy Searching on single wordsDjango PostgreSQL - 对单个单词进行模糊搜索
【发布时间】: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


【解决方案1】:

我认为问题在于您使用三元相似度与两个字母的单词。如果您尝试使用三个字母的单词来执行此操作,也许会奏效?

【讨论】:

  • 不,它没有。当我输入“world”或“are the”时,我仍然没有得到任何结果。
猜你喜欢
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多