# Django 5.0.9.dev20240806133106 ドキュメント

# PostgreSQL 固有のルックアップ

## trigram（トリグラム）類似度

### `trigram_similar`

`trigram_similar` ルックアップを使用すると、専用の PostgreSQL 拡張機能を使用して trigram（トリグラム）検索を実行し、共有される trigram (3 つの連続する文字) の数を測定できます。trigram 検索は式をもとにして結果を返し、現在の類似度のしきい値よりも類似度測定値が高い結果を返します。

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

`trigram_similar` ルックアップは、`CharField` と `TextField` 上で使用できます。

    >>> 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` ルックアップは、 `CharField` と `TextField` で使用できます:

    >>> 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` ルックアップは、 `CharField` と `TextField` で使用できます。

## `Unaccent`

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

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