{"title":"Cari","version":"1.11","locale":"id","docname":"topics/db/search","url":"/id/1.11/topics/db/search/","canonical":"https://djangodocs.dev/id/1.11/topics/db/search/","summary":"Sebuah tugas umum untuk aplikasi jaringan adalah untuk mencari beberapa data dalam basisdata dengan masukan pengguna. Dalam sebuah kasus sederhana, ini dapat…","html":"<h1>Cari<a class=\"heading-anchor\" href=\"#search\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Sebuah tugas umum untuk aplikasi jaringan adalah untuk mencari beberapa data dalam basisdata dengan masukan pengguna. Dalam sebuah kasus sederhana, ini dapat menyaring daftar dari obyek berdasarkan sebuah kategori. Kasus penggunaan lebih rumit mungkin membutuhkan pencarian dengan berat, kategori, penyorotan, banyak bahasa, dan seterusnya. Dokumen ini menjelaskan beberapa dari kemungkinan kasus penggunaan dan alat-alat anda dapat gunakan.</p>\n<p>Kita akan mengacu model sama digunakan dalam <a class=\"reference internal\" href=\"/id/1.11/topics/db/queries/\"><span class=\"doc\">Membuat query</span></a>.</p>\n<section id=\"use-cases\">\n<h2>Kasus Penggunaan<a class=\"heading-anchor\" href=\"#use-cases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"standard-textual-queries\">\n<h3>Standar permintaan kata demi kata<a class=\"heading-anchor\" href=\"#standard-textual-queries\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Bidang-bidang berdasarkan-teks mempunyai pilihan dari tindakan pencocokan sederhana. Sebagai contoh, anda mungkin ingin mengizinkan pencarian seorang penulis seperti itu:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Author</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__contains</span><span class=\"o\">=</span><span class=\"s1\">&#39;Terry&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;Author: Terry Gilliam&gt;, &lt;Author: Terry Jones&gt;]</span>\n</code></pre></div>\n<p>Ini adalah pemecahan sangat rapuh ketika itu membutuhkan pengguna mengetahui substring tepat dari nama penulis. Pendekatan terbaik berupa pencocokan kasus-tidak-peka (<a class=\"reference internal\" href=\"/id/1.11/ref/models/querysets/#std-fieldlookup-icontains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">icontains</span></code></a>), tetapi ini hanya sedikti lebih baik.</p>\n</section>\n<section id=\"a-database-s-more-advanced-comparison-functions\">\n<h3>Fungsi-fungsi perbandingan tingkat lanjut lebih banyak basisdata<a class=\"heading-anchor\" href=\"#a-database-s-more-advanced-comparison-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Jika anda sedang menggunakan PostgreSQL, Django menyediakan <span class=\"xref std std-doc\">a selection of database specific tools 1</span> untuk mengizinkan anda mengungkit lebih rumit pilihan permintaan. Basisdata lain mempunyai pemilihan berbeda dari alat-alat, kemungkinan melalui plugin atau fungsi ditentukan-pengguna. Django tidak menyertakan dukungan apapun untuk mereka pada saat ini. Kami akan menggunakan beberapa contoh dari PostgreSQL untuk menunjukkan hal dari kegunaan basisdata mungkin dimiliki.</p>\n<aside class=\"admonition-searching-in-other-databases admonition\">\n<p class=\"admonition-title\">Pencarian dalam basisdata lain</p>\n<p>Semua alat-alat pencarian disediakan oleh <a class=\"reference internal\" href=\"/id/1.11/ref/contrib/postgres/#module-django.contrib.postgres\" title=\"django.contrib.postgres: PostgreSQL-specific fields and features\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.postgres</span></code></a> dibangun seluruhnya pada API umum seperti  <span class=\"xref std std-doc\">custom lookups 1</span> dan <span class=\"xref std std-doc\">database functions 2</span>. Bergantung pada basisdata anda, anda harus dapat membangun permintaan untuk mengizinkan API yang mirip. Jika ada hal-hal khususyang tidak dapat dicapai cara ini, harap buka sebuah tiket.</p>\n</aside>\n<p>Dalam contoh diatas, kami menentukan bahwa pencarian kasus-tidak-peka akan lebih berguna. Ketika berurusan dengan nama-nama bukan-Inggris, perbaikan lebih lanjut adalah menggunakan <code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">unaccented</span> <span class=\"pre\">comparison</span> <span class=\"pre\">1</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Author</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__icontains</span><span class=\"o\">=</span><span class=\"s1\">&#39;Helen&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;Author: Helen Mirren&gt;, &lt;Author: Helena Bonham Carter&gt;, &lt;Author: Hélène Joy&gt;]</span>\n</code></pre></div>\n<p>Ini menunjukkan masalah lain, dimana kami sedang mencocokkan terhadap pengejaan berbeda dari nama. Dalam kasus ini kami mempunyai asimetris sekalipun - sebuah pencarian untuk <code class=\"docutils literal notranslate\"><span class=\"pre\">Helen</span></code> akan mengambil <code class=\"docutils literal notranslate\"><span class=\"pre\">Helena</span></code> atau <code class=\"docutils literal notranslate\"><span class=\"pre\">Hélène</span></code>, tetapi bukan kebalikannya. Pilihan lain akan menggunakan perbandingan <a class=\"reference internal\" href=\"/id/1.11/ref/contrib/postgres/lookups/#std-fieldlookup-trigram_similar\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">trigram_similar</span></code></a>, yang membandingkan urutan huruf.</p>\n<p>Sebagai contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Author</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__lower__trigram_similar</span><span class=\"o\">=</span><span class=\"s1\">&#39;Hélène&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;Author: Helen Mirren&gt;, &lt;Author: Hélène Joy&gt;]</span>\n</code></pre></div>\n<p>Sekarang kami mempunyai masalah berbeda - nama panjang dari &quot;Helena Bonham Carter&quot; tidak menampilan seperti itu lebih panjang. Pencarian Trigram mempertimbangkan semua perpaduan dari tiga huruf, dan membandingkan seberapa banyak muncul dalam kedua pencarian dan sumber string. Untuk nama terpanjang, ada perpaduan lebih yang muncul dalam string sumber jadi itu tidak lagi dipertimbangkan pencocokan tertutup.</p>\n<p>Pilihan benar dari fungsi perbandingan disini tergantung pada kumpulan data tertentu anda, sebagai contoh bahasa digunakan dan jenis dari teks sedang diari Semua contoh-contoh kami telah lihat adalah pada string pendek dimana pengguna mungkin memasukkan sesuatu mendekatkan (dengan meragamkan pengertian) pada sumber data.</p>\n</section>\n<section id=\"document-based-search\">\n<h3>Pencarian berdasarkan-dokumen<a class=\"heading-anchor\" href=\"#document-based-search\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tindakan basisdata sederhana adalah terlalu sederhana pada pendekatan ketika anda mulai mempertimbangkan blok-blok besar dari teks. Dimana contoh-contoh diatas dapat dipikirkan sebagai tindakan-tindakan pada string dari karakter, pencarian teks penuh mencari kata sebenarnya. Tergantung pada sistem digunakan, itu mungkin menggunakan beberapa dari ide-ide berikut:</p>\n<ul class=\"simple\">\n<li><p>Mengabaikan &quot;kata berhenti&quot; seperti &quot;a&quot;, &quot;the&quot;, &quot;and&quot;.</p></li>\n<li><p>Menghentikan kata-kata, sehingga &quot;pony&quot; dan &quot;ponies&quot; dianggap sama.</p></li>\n<li><p>Bobot kata-kata berdasarkan pada kriteria berbeda seperti sebagaimana sering mereka muncul dalam teks, atau kepentingan dari bidang-bidang, seperti judul atau katakunci, yang mereka muncul.</p></li>\n</ul>\n<p>Ada banyak cara lain untuk menggunakan perangkat lunak pencarian, beberapa dari paling terkemuka adalah <a class=\"reference external\" href=\"https://www.elastic.co/\">Elastic</a> dan <a class=\"reference external\" href=\"http://lucene.apache.org/solr/\">Solr</a>. Ini adalah pemecahan pencarian berdasarkan-dokumen penuh. Untuk menggunakan mereka dengan data dari model-model Django, anda akan butuh lapisan yang menterjemahkan data anda kedalam dokumen tekstual, termasuk acuan-kembali ke id basisdata. Ketika sebuah pencarian menggunakan mesin mengembalikan dokumen tertentu, anda dapat kemudian melihat itu dalam basisdata. Ada beragam pustaka-pustaka pihak-ketiga yang dirancang membantu dengan pengolahan ini.</p>\n<section id=\"postgresql-support\">\n<h4>Dukungan PostgreSQL<a class=\"heading-anchor\" href=\"#postgresql-support\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>PostgreSQL mempunyai penerapan pencarian teks penuh siap pakai sendiri. Selagi tidak sekuat beberapa mesin pencari lain, itu mempunyai keuntungan dari menjadi didalam basisdata anda dan sehingga dapat dengan mudah dipadukan dengan permintaan penghubung lain seperti kategorisasi.</p>\n<p>Modul <a class=\"reference internal\" href=\"/id/1.11/ref/contrib/postgres/#module-django.contrib.postgres\" title=\"django.contrib.postgres: PostgreSQL-specific fields and features\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.postgres</span></code></a> menyediakan beberapa pembantu untuk membuat perubahan permintaan ini. Sebagai contoh, permintaan sederhana mungkin memilih semua masukan blog yang menyebut &quot;cheese&quot;:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</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\">body_text__search</span><span class=\"o\">=</span><span class=\"s1\">&#39;cheese&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">[&lt;Entry: Cheese on Toast recipes&gt;, &lt;Entry: Pizza recipes&gt;]</span>\n</code></pre></div>\n<p>Anda dapat juga menyaring pada perpaduan pada bidang dan pada model terkait:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">search</span><span class=\"o\">=</span><span class=\"n\">SearchVector</span><span class=\"p\">(</span><span class=\"s1\">&#39;blog__tagline&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;body_text&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">search</span><span class=\"o\">=</span><span class=\"s1\">&#39;cheese&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">[</span>\n<span class=\"go\">    &lt;Entry: Cheese on Toast recipes&gt;,</span>\n<span class=\"go\">    &lt;Entry: Pizza Recipes&gt;,</span>\n<span class=\"go\">    &lt;Entry: Dairy farming in Argentina&gt;,</span>\n<span class=\"go\">]</span>\n</code></pre></div>\n<p>Lihat dokumen <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.postgres</span></code> <a class=\"reference internal\" href=\"/id/1.11/ref/contrib/postgres/search/\"><span class=\"doc\">Full text search</span></a> untuk rincian lengkap.</p>\n</section>\n</section>\n</section>","rootId":"search","toc":[{"title":"Kasus Penggunaan","anchor":"use-cases","children":[{"title":"Standar permintaan kata demi kata","anchor":"standard-textual-queries","children":[]},{"title":"Fungsi-fungsi perbandingan tingkat lanjut lebih banyak basisdata","anchor":"a-database-s-more-advanced-comparison-functions","children":[]},{"title":"Pencarian berdasarkan-dokumen","anchor":"document-based-search","children":[{"title":"Dukungan PostgreSQL","anchor":"postgresql-support","children":[]}]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Menggunakan Django","url":"/id/1.11/topics/"},{"docname":"topics/db/index","title":"Model dan basisdata","url":"/id/1.11/topics/db/"}],"prev":{"docname":"topics/db/aggregation","title":"Pengumpulan","url":"/id/1.11/topics/db/aggregation/"},"next":{"docname":"topics/db/managers","title":"Pengelola","url":"/id/1.11/topics/db/managers/"},"formats":{"html":"/id/1.11/topics/db/search/","markdown":"/id/1.11/topics/db/search.md","json":"/id/1.11/topics/db/search.json"},"source":"https://github.com/django/django/blob/stable/1.11.x/docs/topics/db/search.txt","official":"https://docs.djangoproject.com/id/1.11/topics/db/search/","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"],"inLocales":["en","fr","ja","id","pt-br","ko","es","el","pl"]}