PostgreSQL特定查找

三元相似度

trigram_similar

这个 trigram_similar Lookup允许您使用专用的PostgreSQL扩展来执行Trigram查找,测量共享的Trigram(三个连续字符)的数量。三元查找给出一个表达式,并返回相似性度量大于当前相似性阈值的结果。

要使用它,请添加 'django.contrib.postgres' 在你的 INSTALLED_APPS 并激活 pg_trgm extension 在PostgreSQL上。您可以使用 TrigramExtension 迁移操作。

这个 trigram_similar 可以在以下位置使用查找 CharFieldTextField

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

trigram_word_similar

这个 trigram_word_similar Lookup允许您使用专用的PostgreSQL扩展来执行三元组单词相似性查找。它可以近似地理解为测量在参数和字段的任何子串之间共享的最大三元组数量。三元词组单词查找被给予一个表达式,并且返回具有大于当前相似性阈值的单词相似性度量的结果。

要使用它,请添加 'django.contrib.postgres' 在你的 INSTALLED_APPS 并激活 pg_trgm extension 在PostgreSQL上。您可以使用 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 ,除非它强制范围边界与字边界相匹配。

要使用它,请添加 'django.contrib.postgres' 在你的 INSTALLED_APPS 并激活 pg_trgm extension 在PostgreSQL上。您可以使用 TrigramExtension 迁移操作。

这个 trigram_strict_word_similar 可以在以下位置使用查找 CharFieldTextField

Unaccent

这个 unaccent 查找允许您使用专用的PostgreSQL扩展执行不区分重音的查找。

此查找是使用 Transform ,因此它可以与其他查找函数链接。要使用它,您需要添加 'django.contrib.postgres' 在你 INSTALLED_APPS 并激活 unaccent extension on PostgreSQL . 这个 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 在大多数用例中,查找应该执行得很好。但是,使用此筛选器的查询通常会执行完整的表扫描,这在大型表上可能比较慢。在这些情况下,使用专用的全文索引工具可能是合适的。