{"title":"PostgreSQL 特有查找","version":"5.2","locale":"zh-hans","docname":"ref/contrib/postgres/lookups","url":"/zh-hans/5.2/ref/contrib/postgres/lookups/","canonical":"https://djangodocs.dev/zh-hans/5.2/ref/contrib/postgres/lookups/","summary":"三元相似度 Link to this heading # trigram_similar Link to this heading # trigram_similar 允许你使用专用的 PostgreSQL 扩展来执行三元查找，测量共享的…","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>三元相似度<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（三个连续字符）的数量。给定一个表达式进行三元查找，并返回相似度测量大于当前相似度阈值的结果。</p>\n<p>要使用它，在你的 <a class=\"reference internal\" href=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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 扩展来进行三元词相似性查询。它可以近似理解为测量参数和字段的任何子串之间共享的最大数量的三元组。三元组词查找被赋予一个表达式并返回具有大于当前相似度阈值的词相似度度量的结果。</p>\n<p>要使用它，在你的 <a class=\"reference internal\" href=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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<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=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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/unaccent.html\">unaccent 扩展</a> 。如果你想使用迁移来进行这个激活，可以使用 <a class=\"reference internal\" href=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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=\"/zh-hans/5.2/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\">Warning</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":"三元相似度","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":"/zh-hans/5.2/ref/"},{"docname":"ref/contrib/index","title":"contrib 包","url":"/zh-hans/5.2/ref/contrib/"},{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/zh-hans/5.2/ref/contrib/postgres/"}],"prev":{"docname":"ref/contrib/postgres/indexes","title":"PostgreSQL 特有模型索引","url":"/zh-hans/5.2/ref/contrib/postgres/indexes/"},"next":{"docname":"ref/contrib/postgres/operations","title":"数据库迁移操作","url":"/zh-hans/5.2/ref/contrib/postgres/operations/"},"formats":{"html":"/zh-hans/5.2/ref/contrib/postgres/lookups/","markdown":"/zh-hans/5.2/ref/contrib/postgres/lookups.md","json":"/zh-hans/5.2/ref/contrib/postgres/lookups.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/ref/contrib/postgres/lookups.txt","official":"https://docs.djangoproject.com/zh-hans/5.2/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"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}