trigram_similar
允许你使用专用的 PostgreSQL 扩展来执行三元查找,测量共享的 trigram(三个连续字符)的数量。给定一个表达式进行三元查找,并返回相似度测量大于当前相似度阈值的结果。
To use it, add 'django.contrib.postgres'
in your INSTALLED_APPS
and activate the pg_trgm extension on PostgreSQL. You can install the
extension using the
TrigramExtension
migration
operation.
trigram_similar
查找可以用于 CharField
和 TextField
:
>>> City.objects.filter(name__trigram_similar="Middlesborough")
['<City: Middlesbrough>']
The trigram_word_similar
lookup allows you to perform trigram word
similarity lookups using a dedicated PostgreSQL extension. It can be
approximately understood as measuring the greatest number of trigrams shared
between the parameter and any substring of the field. A trigram word lookup is
given an expression and returns results that have a word similarity measurement
greater than the current similarity threshold.
To use it, add 'django.contrib.postgres'
in your INSTALLED_APPS
and activate the pg_trgm extension on PostgreSQL. You can install the
extension using the
TrigramExtension
migration
operation.
The trigram_word_similar
lookup can be used on
CharField
and TextField
:
>>> Sentence.objects.filter(name__trigram_word_similar='Middlesborough')
['<Sentence: Gumby rides on the path of Middlesbrough>']
Unaccent
¶unaccent
查找允许你使用一个专门的 PostgreSQL 扩展来执行不区分重音的查找。
这个查询是用 Transform
来实现的,所以它可以和其他查询函数连锁使用。要使用它,你需要在你的 INSTALLED_APPS
中添加 'django.contrib.postgres'
,并激活 PostgreSQL 上的 unaccent 扩展 。如果你想使用迁移来进行这个激活,可以使用 UnaccentExtension
迁移操作。
unaccent
查找可以用在 CharField
和 TextField
上:
>>> 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
查找在大多数使用情况下应该可以正常进行。但是,使用该过滤器的查询一般会进行全表扫描,这对大表来说可能很慢。在这些情况下,使用专门的全文索引工具可能是合适的。
12月 13, 2021