Banyak aplikasi membuat kueri database untuk mengisi satu halaman di menggunakan berbagai aplikasi obrolan. Dalam aplikasi seperti itu, aplikasi tidak membutuhkan semua cocok, tetapi hanya top-k yang cocok berdasarkan tata urutan indeks. Telusuri indeks dapat menerapkan jenis penelusuran ini dengan sangat efisien. Halaman ini menjelaskan cara membuat dan mencari indeks yang memiliki kecocokan {i>top-k<i}.
Membuat indeks penelusuran untuk pencocokan top-k
Untuk mengonfigurasi indeks penelusuran pencocokan top-k, gunakan ORDER BY
untuk mengurutkan
indeks pencarian berdasarkan kolom tertentu. Kueri harus memiliki klausa ORDER BY
yang sama persis dengan tata urutan indeks penelusuran (termasuk urutan naik versus
arah menurun) dan klausa LIMIT
yang meminta kueri untuk berhenti setelah
menemukan baris
yang cocok dengan k.
Anda juga dapat menerapkan penomoran halaman menggunakan klausa ini. Untuk informasi selengkapnya, lihat Nomori kueri penelusuran.
Untuk beberapa kasus penggunaan, sebaiknya pertahankan beberapa indeks penelusuran diurutkan berdasarkan kolom yang berbeda. Suka partisi, ini adalah kompromi antara penyimpanan dan biaya tulis versus latensi kueri.
Misalnya, perhatikan tabel yang menggunakan skema berikut:
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
RecordTimestamp INT64 NOT NULL,
ReleaseTimestamp INT64 NOT NULL,
ListenTimestamp INT64 NOT NULL,
AlbumTitle STRING(MAX),
AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsRecordTimestampIndex
ON Albums(AlbumTitle_Tokens, SingerId_Tokens)
ORDER BY RecordTimestamp DESC
STORING ListenTimestamp
CREATE SEARCH INDEX AlbumsReleaseTimestampIndex
ON Albums(AlbumTitle_Tokens)
ORDER BY ReleaseTimestamp DESC
STORING ListenTimestamp
Indeks penelusuran kueri untuk kecocokan top-k
Seperti yang disebutkan sebelumnya, kueri harus memiliki klausa ORDER BY
yang sama persis dengan tata urutan indeks penelusuran (termasuk urutan naik versus
arah menurun) dan klausa LIMIT
yang meminta kueri untuk berhenti setelah
menemukan baris
yang cocok dengan k.
Berikut adalah beberapa kueri umum:
Kueri berikut sangat efisien. Fungsi ini memilih Indeks
AlbumsRecordTimestampIndex
. Bahkan jika ada banyak album dengan kata "happy", kueri hanya memindai sejumlah kecil baris:SELECT AlbumId FROM Albums WHERE SEARCH(AlbumTitle_Tokens, 'happy') ORDER BY RecordTimestamp DESC LIMIT 10
Kueri yang sama, meminta tata urutan berdasarkan
ReleaseTimestamp
dalam urutan menurun menggunakan indeksAlbumsReleaseTimestampIndex
, serta sama-sama efisien:SELECT AlbumId FROM Albums WHERE SEARCH(AlbumTitle_Tokens, 'happy') ORDER BY ReleaseTimestamp DESC LIMIT 10
Pada saat yang sama, kueri yang meminta tata urutan berdasarkan
ListenTimestamp
tidak mengeksekusi kueri {i>top-k<i} secara efisien. Metode ini harus mengambil semua album yang cocok, mengurutkan hasil tersebut paling lambatListenTimestamp,
dan menampilkan 10 urutan teratas. Kueri semacam itu menggunakan sumber daya jika ada sejumlah besar dokumen yang berisi istilah "bahagia".SELECT AlbumId FROM Albums WHERE SEARCH(AlbumTitle_Tokens, 'happy') ORDER BY ListenTimestamp DESC LIMIT 10`
Demikian pula, kueri tidak akan berjalan secara efisien jika diminta bahwa hasil diurutkan menggunakan kolom
RecordTimestamp
dalam urutan menaik. Fitur ini memindai semua baris dengan kata "happy", meskipun memilikiLIMIT
.SELECT AlbumId FROM Albums WHERE SEARCH(AlbumTitle_Tokens, 'happy') ORDER BY RecordTimestamp ASC LIMIT 10
Langkah selanjutnya
- Pelajari kueri penelusuran teks lengkap.
- Pelajari cara memberi peringkat hasil penelusuran.
- Pelajari cara memberi nomor halaman pada hasil penelusuran.
- Pelajari cara menggabungkan kueri teks lengkap dan non-teks.
- Pelajari cara menelusuri beberapa kolom.