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")
['<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")
['<Sentence: Gumby rides on the path of Middlesbrough>']

trigram_strict_word_similar

New in Django 4.2.

trigram_word_similar と似ていますが、範囲の境界を単語の境界に一致させることを強制します。

これを使うには、 INSTALLED_APPS'django.contrib.postgres' を追加し、 PostgreSQL 上で pg_trgm extension を有効にしてください。 TrigramExtension というマイグレーションオペレーションを使って拡張機能をインストールできます。

trigram_strict_word_similar ルックアップは、 CharFieldTextField で使用できます。

Unaccent

unaccent ルックアップを使用すると、専用の PostgreSQL 拡張機能を使って、アクセントを無視した検索を行うことができます。

このルックアップは Transform を使用して実装されているため、他のルックアップ関数と連結させることができます。これを使用するには、 INSTALLED_APPS'django.contrib.postgres' を追加し、 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 のルックアップは適切に動作します。ただし、このフィルタを使用したクエリは通常、全体のテーブルをスキャンするため、大きなテーブルでは遅くなる可能性があります。そのような場合には、専用の全文検索ツールを使用することが適切かもしれません。

Back to Top