PostgreSQL 特有查找

三元相似度

trigram_similar

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

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

trigram_similar 查找可以用于 CharFieldTextField

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

trigram_word_similar

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

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

trigram_word_similar 查找可以用于 CharFieldTextField

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

trigram_strict_word_similar

类似于 trigram_word_similar,但它强制范围边界与单词边界匹配。

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

trigram_strict_word_similar 查找可以用于 CharFieldTextField

Unaccent

unaccent 查找允许你使用一个专门的 PostgreSQL 扩展来执行不区分重音的查找。

This lookup is implemented using Transform, so it can be chained with other lookup functions. To use it, you need to add 'django.contrib.postgres' in your INSTALLED_APPS and activate the unaccent extension on PostgreSQL. The UnaccentExtension migration operation is available if you want to perform this activation using migrations.

unaccent 查找可以用于 CharFieldTextField

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

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

Warning

unaccent 查找在大多数使用情况下应该可以正常进行。但是,使用该过滤器的查询一般会进行全表扫描,这对大表来说可能很慢。在这些情况下,使用专门的全文索引工具可能是合适的。