Skip to content

djangodocs

Django 3.0
  • 6.1 current
  • 6.0
  • 5.2 LTS
  • 5.1 unsupported
  • 5.0 unsupported
  • 4.2 unsupported
  • 4.1 unsupported
  • 4.0 unsupported
  • 3.2 unsupported
  • 3.1 unsupported
  • 3.0 unsupported
  • 2.2 unsupported
  • 2.1 unsupported
  • 2.0 unsupported
  • 1.11 unsupported
  • 1.10 unsupported
  • 1.9 unsupported
Bahasa Indonesia
  • English
  • 简体中文
  • Français
  • 日本語
  • Bahasa Indonesia
  • Português (Brasil)
  • 한국어
  • Español
  • Ελληνικά
  • Polski
Documentation contents
  • Dokumentasi Django
  • Mulai
  • Menggunakan Django
  • Panduan "Bagaimana"
  • FAQ Django
  • Acuan API
    • Aplikasi
    • Kerangka pemeriksaan sistem
    • API tampilan berdasarkan-kelas siap-pakai
    • Perlindungan clickjacking
    • Paket contrib
      • Situs admin Django
      • django.contrib.auth
      • Kerangka contenttypes
      • Aplikasi flatpage
      • GeoDjango
      • django.contrib.humanize
      • Kerangka pesan
      • django.contrib.postgres
        • Fungsi pengumpulan khusus PostgreSQL
        • Batasan basisdata spesifik PostgreSQL
        • Bidang-bidang model khusus PostgreSQL
        • Bidang formulir khusus PostgreSQL dan widget
        • Fungsi-fungsi basisdata khusus PostgreSQL
        • Indeks model khusus PostgreSQL
        • Pencarian khusus PostgreSQL
        • Tindakan perpindahan basisdata
        • Pencarian teks penuh
        • Pengesah
      • Aplikasi pengalihan
      • Kerangka peta situs
      • Kerangka kerja "sites"
      • Aplikasi staticfiles
      • Kerangka kerja umpan perkongsian
    • Perlindungan Cross Site Request Forgery
    • Basisdata
    • django-admin dan manage.py
    • Pengecualian Django
    • Penanganan berkas
    • Formulir
    • Middleware
    • Tindakan Perpindahan
    • Model
    • Paginator
    • Obyek permintaan dan tanggapan
    • SchemaEditor
    • Pengaturan
    • Sinyal
    • Templat
    • TemplateResponse dan``SimpleTemplateResponse``
    • Data Unicode
    • Fungsi-fungsi kegunaan django.urls
    • Fungsi-fungsi django.urls untuk digunakan dalam URLconf
    • Perlengkapan Django
    • Pengesah
    • Tampilan Siap pakai
  • Dokumentasi-meta dan bunga rampai
  • Glosarium
  • Catatan terbitan
  • Dalam Django
Django 3.0 is no longer supported. It receives no security fixes. Use it for reference only. Latest release
Indonesian translation. Contributed by the Django community. 76.9% Help translate
  1. Django 3.0
  2. Acuan API
  3. Paket contrib
  4. django.contrib.postgres

Pencarian teks penuhLink to this heading#

Fungsi-fungsi basisdata dalam modul django.contrib.postgres.search kemudahan penggunaan full text search engine PostgreSQL.

Sebagai contoh dalam dokumen ini, kami akan menggunakan model ditentukan dalam Membuat query.

Lihat juga

Untuk tinjauan tingkat-tinggi dari pencarian, lihat :doc:`topic documentation `.

Pencarian searchLink to this heading#

A common way to use full text search is to search a single term against a single column in the database. For example:

Code
>>> Entry.objects.filter(body_text__search='Cheese')
[<Entry: Cheese on Toast recipes>, <Entry: Pizza Recipes>]

Ini membuat sebuah to_tsvector dalam basisdata dari bidang body_text dan plainto_tsquery dari istilah pencarian 'Cheese', kedua menggunakan konfigurasi pencarian basisdata awalan. Hasil didapatkan dengan mencocokkan permintaan dan vektor.

Untuk menggunakan pencarian search, 'django.contrib.postgres' harus berada dalam INSTALLED_APPS anda.

SearchVectorLink to this heading#

class SearchVector(*expressions, config=None, weight=None)Link to this definition#

Pencarian terhadap bidang tunggal lebih hebat tetapi agak terbatas. Contoh-contoh Entry kami sedang cari milik sebuah Blog, yang mempunyai bidang tagline. Untuk meminta terhadap kedua bidang, gunakan SearchVector:

Code
>>> from django.contrib.postgres.search import SearchVector
>>> Entry.objects.annotate(
...     search=SearchVector('body_text', 'blog__tagline'),
... ).filter(search='Cheese')
[<Entry: Cheese on Toast recipes>, <Entry: Pizza Recipes>]

Argumen-argumen pada SearchVector dapat berupa Expression apapun atau nama dari sebuah bidang. Banyak argumen akan dihubungkan bersama menggunakan sebuah ruang sehingga pencarian dokumen menyertakan mereka semua.

Vektor SearchVector dapat dipadukan bersama-sama, mengizinkan anda menggunakan kembali mereka. Sebagai contoh:

Code
>>> Entry.objects.annotate(
...     search=SearchVector('body_text') + SearchVector('blog__tagline'),
... ).filter(search='Cheese')
[<Entry: Cheese on Toast recipes>, <Entry: Pizza Recipes>]

Lihat Merubah konfigurasi pencarian dan Meminta pembobotan untuk sebuah penjelasan dari parameter config dan weight.

SearchQueryLink to this heading#

class SearchQuery(value, config=None, search_type='plain')Link to this definition#

SearchQuery menterjemahkan istilah pengguna sediakan kedalam obyek permintaan pencarian yang basisdata bandingkan pada pencarian vektor. Secara awalan, semua kata pengguna sediakan dilewatkan melalui algoritma berasal, dan kemudian itu mencari kecocokan untuk semua istilah yang dihasilkan.

Jika search_type adalah 'plain', yang merupakan awalan, istilah-istilah diperlakukan sebagai kata kunci terpisah. Jika search_type adalah 'phrase', istilah-istilah diperlakukan sebagai frasa tunggal. Jika search_type adalah 'raw', kemudian anda dapat menyediakan permintaan pencarian dibentuk dengan istilah dan penghubung. Baca Full Text Search docs PostgreSQL untuk mempelajari tentang perbedaan dan sintaksis. Contoh-contoh:

Code
>>> from django.contrib.postgres.search import SearchQuery
>>> SearchQuery('red tomato')  # two keywords
>>> SearchQuery('tomato red')  # same results as above
>>> SearchQuery('red tomato', search_type='phrase')  # a phrase
>>> SearchQuery('tomato red', search_type='phrase')  # a different phrase
>>> SearchQuery("'tomato' & ('red' | 'green')", search_type='raw')  # boolean operators

Istilah SearchQuery dapat dipadukan secara logika untuk menyediakan keluwesan lebih:

Code
>>> from django.contrib.postgres.search import SearchQuery
>>> SearchQuery('meat') & SearchQuery('cheese')  # AND
>>> SearchQuery('meat') | SearchQuery('cheese')  # OR
>>> ~SearchQuery('meat')  # NOT

Lihat Merubah konfigurasi pencarian untuk sebuah penjelasan dari parameter config.

New in Django 2.2

The search_type parameter was added.

SearchRankLink to this heading#

class SearchRank(vector, query, weights=None)Link to this definition#

So far, we've returned the results for which any match between the vector and the query are possible. It's likely you may wish to order the results by some sort of relevancy. PostgreSQL provides a ranking function which takes into account how often the query terms appear in the document, how close together the terms are in the document, and how important the part of the document is where they occur. The better the match, the higher the value of the rank. To order by relevancy:

Code
>>> from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector
>>> vector = SearchVector('body_text')
>>> query = SearchQuery('cheese')
>>> Entry.objects.annotate(rank=SearchRank(vector, query)).order_by('-rank')
[<Entry: Cheese on Toast recipes>, <Entry: Pizza recipes>]

Lihat Meminta pembobotan untuk penjelasan dari parameter weights.

Merubah konfigurasi pencarianLink to this heading#

Anda dapat menentukan atribut config pada SearchVector dan SearchQuery untuk menggunakan konfigurasi pencarian berbeda. Ini mengizinkan menggunakan pengurai bahasa berbeda dan dictionary sebagai ditentukan oleh basisdata:

Code
>>> from django.contrib.postgres.search import SearchQuery, SearchVector
>>> Entry.objects.annotate(
...     search=SearchVector('body_text', config='french'),
... ).filter(search=SearchQuery('œuf', config='french'))
[<Entry: Pain perdu>]

Nilai dari config dapat juga disimpan dalam kolom lain:

Code
>>> from django.db.models import F
>>> Entry.objects.annotate(
...     search=SearchVector('body_text', config=F('blog__language')),
... ).filter(search=SearchQuery('œuf', config=F('blog__language')))
[<Entry: Pain perdu>]

Meminta pembobotanLink to this heading#

Setiap bidang mungkin tidak memiliki hubungan dalam sebuah permintaan, jadi anda dapat mensetel berat dari beragam vektor sebelum anda mamadukan mereka:

Code
>>> from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector
>>> vector = SearchVector('body_text', weight='A') + SearchVector('blog__tagline', weight='B')
>>> query = SearchQuery('cheese')
>>> Entry.objects.annotate(rank=SearchRank(vector, query)).filter(rank__gte=0.3).order_by('rank')

Berat harus beupa satu dari huruf berikut: D, C, B, A. Secara awalan, berat ini mengacu pada angka 0.1, 0.2, 0.4, dan 1.0, masing-masing. Jika anda berharap pada berat mereka berbeda, lewatkan daftar dari float emapt kami ke SearchRank sebagai weights dalam urutan sama diatas:

Code
>>> rank = SearchRank(vector, query, weights=[0.2, 0.4, 0.6, 0.8])
>>> Entry.objects.annotate(rank=rank).filter(rank__gte=0.3).order_by('-rank')

PenampilanLink to this heading#

Konfigurasi basisdata khusus tidak diperlukan untuk menggunakan fungsi ini apapun, bagaimapun, jika anda sedang mencari lebih dari sedikit ratusan rekaman, anda mungkin berjalan kedalam masalah penampilan. Pencarian teks penuh adalah pengolahan lebih intensif daripada membandingkan ukuran dari integer, sebagai contoh.

Pada kegiatan dimana semua bidang anda sedang minta mengandung dalam satu model tertentu, anda dapat membuat sebuah indeks kegunaan yang cocok vektor pencarian anda ingin gunakan. Dokumentasi PostgreSQL mempunyai rincian pada creating indexes for full text search.

SearchVectorFieldLink to this heading#

class SearchVectorFieldLink to this definition#

Jika pendekatan ini menjadi terlalu lambat, anda dapat menambahkan SearchVectorField ke model anda. Anda akan butuh menjaga itu dikumpulkan dengan pemicu, sebagai contoh, seperti digambarkan dalam PostgreSQL documentation. Anda kemudian dapat meminta bidang seperti jika itu dinyatakan SearchVector:

Code
>>> Entry.objects.update(search_vector=SearchVector('body_text'))
>>> Entry.objects.filter(search_vector='cheese')
[<Entry: Cheese on Toast recipes>, <Entry: Pizza recipes>]

Kemiripan trigramLink to this heading#

Pendekatan lain untuk mencari adalah kemiripan trigram. Trigram adalah kelompok dari tiga karakter berurutan. Sebagai tambahan pada pencarian trigram_similar, anda dapat menggunakan sepasang pernyataan lain.

Untuk menggunakan mereka, anda butuh mengaktifkan pg_trgm extension pada PostgreSQL. Anda dapat memasang itu menggunakan tindakan perpindahan TrigramExtension.

TrigramSimilarityLink to this heading#

class TrigramSimilarity(expression, string, **extra)Link to this definition#

Menerima nama bidang atau pernyataan, dan string atau pernyataan. Mengembalikan kemiripan trigram diantara dua argumen.

Contoh penggunaan:

Code
>>> from django.contrib.postgres.search import TrigramSimilarity
>>> Author.objects.create(name='Katy Stevens')
>>> Author.objects.create(name='Stephen Keats')
>>> test = 'Katie Stephens'
>>> Author.objects.annotate(
...     similarity=TrigramSimilarity('name', test),
... ).filter(similarity__gt=0.3).order_by('-similarity')
[<Author: Katy Stevens>, <Author: Stephen Keats>]

TrigramDistanceLink to this heading#

class TrigramDistance(expression, string, **extra)Link to this definition#

Menerima nama bidang atau pernyataan, dan string atau pernyataan. mengembalikan jarak trigram diantara dua argumen.

Contoh penggunaan:

Code
>>> from django.contrib.postgres.search import TrigramDistance
>>> Author.objects.create(name='Katy Stevens')
>>> Author.objects.create(name='Stephen Keats')
>>> test = 'Katie Stephens'
>>> Author.objects.annotate(
...     distance=TrigramDistance('name', test),
... ).filter(distance__lte=0.7).order_by('distance')
[<Author: Katy Stevens>, <Author: Stephen Keats>]

This page as Markdown JSON

Edit this page on GitHub Official version

PreviousTindakan perpindahan basisdata NextPengesah

On this page

  • Pencarian search
  • SearchVector
  • SearchQuery
  • SearchRank
  • Merubah konfigurasi pencarian
  • Meminta pembobotan
  • Penampilan
    • SearchVectorField
  • Kemiripan trigram
    • TrigramSimilarity
    • TrigramDistance

An unofficial rendering of the Django documentation.

Not affiliated with or endorsed by the Django Software Foundation. The documentation is copyright © Django Software Foundation and individual contributors, and is used under the BSD 3-Clause licence. “Django” is a trademark of the Django Software Foundation.

This translation is the work of the Django i18n community, not of this site. Read the official documentation at docs.djangoproject.com.

👋 Jason Cartwright