PostgreSQL 特定的查找

三元组相似度

trigram_similar

trigram_similar 查找允许你执行三元组查找,使用专用的 PostgreSQL 扩展来衡量共享的三元组(三个连续字符)的数量。给定一个表达式的三元组查找将返回相似度测量值大于当前相似度阈值的查询结果。

要使用它,请在你的 INSTALLED_APPS 中添加 'django.contrib.postgres' 并激活 PostgreSQL 上的 pg_trgm 扩展。你可以使用 TrigramExtension 迁移操作来安装此扩展。

trigram_similar 查找可用于 CharFieldTextField

>>> City.objects.filter(name__trigram_similar="Middlesborough")
['<City: Middlesbrough>']

trigram_word_similar

trigram_word_similar 查找允许你使用专用的 PostgreSQL 扩展执行三元组词语相似度查找。它可以近似地理解为测量参数与字段的任何子字符串之间共享的三元组的最大数量。给定一个表达式的三元组词语查找将返回词语相似度测量值大于当前相似度阈值的查询结果。

要使用它,请在你的 INSTALLED_APPS 中添加 'django.contrib.postgres' 并激活 PostgreSQL 上的 pg_trgm 扩展。你可以使用 TrigramExtension 迁移操作来安装此扩展。

trigram_word_similar 查找可用于 CharFieldTextField

>>> Sentence.objects.filter(name__trigram_word_similar="Middlesborough")
['<Sentence: Gumby rides on the path of Middlesbrough>']

trigram_strict_word_similar

类似于 trigram_word_similar,不同之处在于它强制范围边界与词语边界匹配。

要使用它,请在你的 INSTALLED_APPS 中添加 'django.contrib.postgres' 并激活 PostgreSQL 上的 pg_trgm 扩展。你可以使用 TrigramExtension 迁移操作来安装此扩展。

trigram_strict_word_similar 查找可用于 CharFieldTextField

Unaccent

unaccent 查找允许你使用专用的 PostgreSQL 扩展执行不区分重音符号的查找。

此查找使用 Transform 实现,因此可以与其他查找函数链接。要使用它,你需要在你的 INSTALLED_APPS 中添加 'django.contrib.postgres' 并激活 PostgreSQL 上的 unaccent 扩展UnaccentExtension 迁移操作可用,如果你想使用迁移执行此激活的话。

unaccent 查找可用于 CharFieldTextField

>>> City.objects.filter(name__unaccent="México")
['<City: Mexico>']

>>> User.objects.filter(first_name__unaccent__startswith="Jerem")
['<User: Jeremy>', '<User: Jérémy>', '<User: Jérémie>', '<User: Jeremie>']

警告

unaccent 查找在大多数用例中应该都能正常工作。但是,使用此过滤器进行的查询通常会执行全表扫描,这在大型表上可能会很慢。在这种情况下,使用专用的全文索引工具可能更合适。

返回顶部