PostgreSQL 固有のルックアップ

trigram(トリグラム)類似度

trigram_similar

trigram_similar ルックアップを使用すると、専用の PostgreSQL 拡張機能を使用して trigram(トリグラム)検索を実行し、共有される trigram (3 つの連続する文字) の数を測定できます。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 拡張を使用して trigram 単語類似性ルックアップを実行できます。これは、パラメータとフィールドの任意の部分文字列の間で共有される trigram の最大数を測定するという程度に理解できます。trigram 単語ルックアップは式を受け取り、現在の類似度閾値よりも大きい単語類似性測定値を持つ結果を返します。

これを使うには、 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>]>

警告

ほとんどのケースでは、unaccent のルックアップは適切に動作します。ただし、このフィルタを使用したクエリは通常、全体のテーブルをスキャンするため、大きなテーブルでは遅くなる可能性があります。そのような場合には、専用の全文検索ツールを使用することが適切かもしれません。