{"title":"PostgreSQL 固有のルックアップ","version":"5.0","locale":"ja","docname":"ref/contrib/postgres/lookups","url":"/ja/5.0/ref/contrib/postgres/lookups/","canonical":"https://djangodocs.dev/ja/5.0/ref/contrib/postgres/lookups/","summary":"trigram（トリグラム）類似度 Link to this heading # trigram_similar Link to this heading # trigram_similar ルックアップを使用すると、専用の PostgreSQL 拡張機能を使用して trigram（トリグラム）検索を実行し、共有される…","html":"<h1>PostgreSQL 固有のルックアップ<a class=\"heading-anchor\" href=\"#postgresql-specific-lookups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"trigram-similarity\">\n<h2>trigram（トリグラム）類似度<a class=\"heading-anchor\" href=\"#trigram-similarity\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"trigram-similar\">\n<span id=\"std-fieldlookup-trigram_similar\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">trigram_similar</span></code><a class=\"heading-anchor\" href=\"#trigram-similar\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">trigram_similar</span></code> ルックアップを使用すると、専用の PostgreSQL 拡張機能を使用して trigram（トリグラム）検索を実行し、共有される trigram (3 つの連続する文字) の数を測定できます。trigram 検索は式をもとにして結果を返し、現在の類似度のしきい値よりも類似度測定値が高い結果を返します。</p>\n<p>これを使うには、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> に <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.postgres'</span></code> を追加し、 PostgreSQL 上で <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/pgtrgm.html\">pg_trgm extension</a> を有効にしてください。 <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/postgres/operations/#django.contrib.postgres.operations.TrigramExtension\" title=\"django.contrib.postgres.operations.TrigramExtension\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TrigramExtension</span></code></a> というマイグレーションオペレーションを使って拡張機能をインストールできます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">trigram_similar</span></code> ルックアップは、<a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> と <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.TextField\" title=\"django.db.models.TextField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextField</span></code></a> 上で使用できます。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">City</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__trigram_similar</span><span class=\"o\">=</span><span class=\"s2\">&quot;Middlesborough&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">[&#39;&lt;City: Middlesbrough&gt;&#39;]</span>\n</code></pre></div>\n</section>\n<section id=\"trigram-word-similar\">\n<span id=\"std-fieldlookup-trigram_word_similar\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">trigram_word_similar</span></code><a class=\"heading-anchor\" href=\"#trigram-word-similar\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">trigram_word_similar</span></code> ルックアップを使用すると、専用の PostgreSQL 拡張を使用して trigram 単語類似性ルックアップを実行できます。これは、パラメータとフィールドの任意の部分文字列の間で共有される trigram の最大数を測定するという程度に理解できます。trigram 単語ルックアップは式を受け取り、現在の類似度閾値よりも大きい単語類似性測定値を持つ結果を返します。</p>\n<p>これを使うには、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> に <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.postgres'</span></code> を追加し、 PostgreSQL 上で <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/pgtrgm.html\">pg_trgm extension</a> を有効にしてください。 <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/postgres/operations/#django.contrib.postgres.operations.TrigramExtension\" title=\"django.contrib.postgres.operations.TrigramExtension\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TrigramExtension</span></code></a> というマイグレーションオペレーションを使って拡張機能をインストールできます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">trigram_word_similar</span></code> ルックアップは、 <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> と <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.TextField\" title=\"django.db.models.TextField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextField</span></code></a> で使用できます:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Sentence</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__trigram_word_similar</span><span class=\"o\">=</span><span class=\"s2\">&quot;Middlesborough&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">[&#39;&lt;Sentence: Gumby rides on the path of Middlesbrough&gt;&#39;]</span>\n</code></pre></div>\n</section>\n<section id=\"trigram-strict-word-similar\">\n<span id=\"std-fieldlookup-trigram_strict_word_similar\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">trigram_strict_word_similar</span></code><a class=\"heading-anchor\" href=\"#trigram-strict-word-similar\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"version-note version-added\" data-version=\"4.2\">\n<p class=\"version-note-title\">New in Django 4.2</p></aside>\n<p><a class=\"reference internal\" href=\"#std-fieldlookup-trigram_word_similar\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">trigram_word_similar</span></code></a> と似ていますが、範囲の境界を単語の境界に一致させることを強制します。</p>\n<p>これを使うには、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> に <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.postgres'</span></code> を追加し、 PostgreSQL 上で <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/pgtrgm.html\">pg_trgm extension</a> を有効にしてください。 <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/postgres/operations/#django.contrib.postgres.operations.TrigramExtension\" title=\"django.contrib.postgres.operations.TrigramExtension\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TrigramExtension</span></code></a> というマイグレーションオペレーションを使って拡張機能をインストールできます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">trigram_strict_word_similar</span></code> ルックアップは、 <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> と <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.TextField\" title=\"django.db.models.TextField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextField</span></code></a> で使用できます。</p>\n</section>\n</section>\n<section id=\"unaccent\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">Unaccent</span></code><a class=\"heading-anchor\" href=\"#unaccent\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p id=\"std-fieldlookup-unaccent\"><code class=\"docutils literal notranslate\"><span class=\"pre\">unaccent</span></code> ルックアップを使用すると、専用の PostgreSQL 拡張機能を使って、アクセントを無視した検索を行うことができます。</p>\n<p>このルックアップは <a class=\"reference internal\" href=\"/ja/5.0/ref/models/lookups/#django.db.models.Transform\" title=\"django.db.models.Transform\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Transform</span></code></a> を使用して実装されているため、他のルックアップ関数と連結させることができます。これを使用するには、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> に <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.postgres'</span></code> を追加し、 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/unaccent.html\">unaccent extension on PostgreSQL</a> を有効にする必要があります。この有効化をマイグレーションを使用して行いたい場合は、 <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/postgres/operations/#django.contrib.postgres.operations.UnaccentExtension\" title=\"django.contrib.postgres.operations.UnaccentExtension\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UnaccentExtension</span></code></a> マイグレーションオペレーションが利用可能です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">unaccent</span></code> ルックアップは、<a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> と <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.TextField\" title=\"django.db.models.TextField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextField</span></code></a> で使用できます。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">City</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__unaccent</span><span class=\"o\">=</span><span class=\"s2\">&quot;México&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">[&#39;&lt;City: Mexico&gt;&#39;]</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">first_name__unaccent__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Jerem&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">[&#39;&lt;User: Jeremy&gt;&#39;, &#39;&lt;User: Jérémy&gt;&#39;, &#39;&lt;User: Jérémie&gt;&#39;, &#39;&lt;User: Jeremie&gt;&#39;]</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>ほとんどのケースでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">unaccent</span></code> のルックアップは適切に動作します。ただし、このフィルタを使用したクエリは通常、全体のテーブルをスキャンするため、大きなテーブルでは遅くなる可能性があります。そのような場合には、専用の全文検索ツールを使用することが適切かもしれません。</p>\n</aside>\n</section>","rootId":"postgresql-specific-lookups","toc":[{"title":"trigram（トリグラム）類似度","anchor":"trigram-similarity","children":[{"title":"trigram_similar","anchor":"trigram-similar","children":[]},{"title":"trigram_word_similar","anchor":"trigram-word-similar","children":[]},{"title":"trigram_strict_word_similar","anchor":"trigram-strict-word-similar","children":[]}]},{"title":"Unaccent","anchor":"unaccent","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API リファレンス","url":"/ja/5.0/ref/"},{"docname":"ref/contrib/index","title":"contrib パッケージ","url":"/ja/5.0/ref/contrib/"},{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/ja/5.0/ref/contrib/postgres/"}],"prev":{"docname":"ref/contrib/postgres/indexes","title":"PostgreSQL 固有のモデルインデックス","url":"/ja/5.0/ref/contrib/postgres/indexes/"},"next":{"docname":"ref/contrib/postgres/operations","title":"データベースのマイグレーション・オペレーション","url":"/ja/5.0/ref/contrib/postgres/operations/"},"formats":{"html":"/ja/5.0/ref/contrib/postgres/lookups/","markdown":"/ja/5.0/ref/contrib/postgres/lookups.md","json":"/ja/5.0/ref/contrib/postgres/lookups.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/contrib/postgres/lookups.txt","official":"https://docs.djangoproject.com/ja/5.0/ref/contrib/postgres/lookups/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}