Ringkasan :dalam tutorial ini, Anda akan mempelajari cara menggunakan fitur pencarian teks lengkap SQLite dengan menggunakan modul tabel virtual FTS5.
Pengantar pencarian teks lengkap SQLite
Tabel virtual adalah ekstensi khusus untuk SQLite. Meja virtual seperti meja biasa. Perbedaan antara tabel virtual dan tabel normal adalah dari mana data berasal, yaitu ketika Anda memproses tabel normal, SQLite mengakses file database untuk mengambil data. Namun, saat Anda mengakses tabel virtual, SQLite memanggil kode kustom untuk mendapatkan data. Kode kustom dapat memiliki logika tertentu untuk menangani tugas tertentu seperti mendapatkan data dari berbagai sumber data.
Untuk menggunakan pencarian teks lengkap di SQLite, Anda menggunakan modul tabel virtual FTS5.
Berikut CREATE VIRTUAL TABLE
pernyataan membuat tabel FTS5 dengan dua kolom:
CREATE VIRTUAL TABLE table_name
USING FTS5(column1,column2...);
Code language: SQL (Structured Query Language) (sql)
Perhatikan bahwa Anda tidak dapat menambahkan jenis, batasan, atau PRIMARY KEY
deklarasi di CREATE VIRTUAL TABLE
pernyataan untuk membuat tabel FTS5. Jika Anda melakukannya, SQLite akan mengeluarkan kesalahan.
Seperti membuat tabel normal tanpa menentukan kolom kunci utama, SQLite menambahkan rowid
implicit implisit kolom ke tabel FTS5.
Contoh berikut membuat tabel FTS5 bernama posts
dengan dua kolom title
dan body
.
CREATE VIRTUAL TABLE posts
USING FTS5(title, body);
Code language: SQL (Structured Query Language) (sql)
Mirip dengan tabel biasa, Anda dapat memasukkan data ke dalam posts
tabel sebagai berikut:
INSERT INTO posts(title,body)
VALUES('Learn SQlite FTS5','This tutorial teaches you how to perform full-text search in SQLite using FTS5'),
('Advanced SQlite Full-text Search','Show you some advanced techniques in SQLite full-text searching'),
('SQLite Tutorial','Help you learn SQLite quickly and effectively');
Code language: SQL (Structured Query Language) (sql)
Dan data kueri yang menentangnya:
SELECT * FROM posts;
Code language: SQL (Structured Query Language) (sql)
Meminta data menggunakan penelusuran teks lengkap
Anda dapat menjalankan kueri teks lengkap terhadap tabel FTS5 menggunakan salah satu dari tiga cara berikut.
Pertama, gunakan MATCH
operator dalam klausa WHERE dari pernyataan SELECT. Misalnya, untuk mendapatkan semua baris yang memiliki istilah fts5
, Anda menggunakan kueri berikut:
SELECT *
FROM posts
WHERE posts MATCH 'fts5';
Code language: SQL (Structured Query Language) (sql)
Kedua, gunakan yang sama (=
) di operator WHERE
klausa dari SELECT
penyataan. Pernyataan berikut mengembalikan hasil yang sama dengan pernyataan di atas:
SELECT *
FROM posts
WHERE posts = 'fts5';
Code language: SQL (Structured Query Language) (sql)
Ketiga, gunakan sintaks fungsi nilai-tabel. Dengan cara ini, Anda menggunakan istilah penelusuran sebagai argumen tabel pertama:
SELECT *
FROM posts('fts5');
Code language: SQL (Structured Query Language) (sql)
Secara default, FTS5 adalah case-independen. Ini memperlakukan istilah fts5
FTS5
dan Fts5
sama.
Untuk mengurutkan hasil pencarian dari yang paling relevan hingga yang paling tidak relevan, Anda menggunakan klausa ORDER BY sebagai berikut:
SELECT *
FROM posts
WHERE posts MATCH 'text'
ORDER BY rank;
Code language: SQL (Structured Query Language) (sql)
Menggunakan sintaks kueri teks lengkap
Kueri pencarian teks lengkap terdiri dari frasa, di mana setiap frasa adalah daftar berurutan dari satu atau lebih token. Anda dapat menggunakan operator “+” untuk menggabungkan dua frasa seperti contoh berikut:
"learn SQLite"
"learn + SQLite"
Code language: SQL (Structured Query Language) (sql)
FTS5 menentukan apakah dokumen cocok dengan frasa jika dokumen tersebut berisi setidaknya satu suburutan token yang cocok dengan urutan token yang digunakan untuk menyusun frasa.
Kueri berikut mengembalikan semua dokumen yang cocok dengan istilah pencarian Learn SQLite
:
SELECT *
FROM posts
WHERE posts MATCH 'learn SQLite';
Code language: SQL (Structured Query Language) (sql)
Penelusuran awalan
Anda dapat menggunakan tanda bintang (*) sebagai token awalan. Jika frasa berisi tanda bintang (*), frasa tersebut akan cocok dengan dokumen apa pun yang berisi token yang dimulai dengan frasa tersebut. Misalnya, pencarian* cocok dengan pencarian, pencarian, pencarian, dll. Lihat contoh berikut:
SELECT *
FROM posts
WHERE posts = 'search*';
Code language: SQL (Structured Query Language) (sql)
Operator Boolean
Anda dapat menggunakan operator Boolean mis., NOT
, OR
, atau AND
untuk menggabungkan kueri.
- q1 DAN q2:cocok jika kueri q1 dan q2 cocok.
- q1 ATAU q2:cocok jika kueri q1 atau q2 cocok.
- q1 NOT q2:cocok jika kueri q1 cocok dan q2 tidak cocok.
Misalnya, untuk mendapatkan dokumen yang cocok dengan learn
frasa tetapi tidak cocok dengan FTS5
frase, Anda menggunakan NOT
operator sebagai berikut:
SELECT *
FROM posts
WHERE posts MATCH 'learn NOT text';
Code language: SQL (Structured Query Language) (sql)
Untuk mencari dokumen yang cocok dengan salah satu frasa learn
atau text
, Anda menggunakan OR
operator seperti contoh berikut:
SELECT *
FROM posts
WHERE posts MATCH 'learn OR text';
Code language: SQL (Structured Query Language) (sql)
Untuk menemukan dokumen yang cocok dengan SQLite dan pencarian, gunakan AND
operator seperti yang ditunjukkan di bawah ini:
SELECT *
FROM posts
WHERE posts MATCH 'sqlite AND searching';
Code language: SQL (Structured Query Language) (sql)
Untuk mengubah prioritas operator, Anda menggunakan tanda kurung untuk mengelompokkan ekspresi. Misalnya:
SELECT *
FROM posts
WHERE posts MATCH 'search AND sqlite OR help';
Code language: SQL (Structured Query Language) (sql)
Pernyataan mengembalikan dokumen yang cocok dengan search
dan sqlite
atau help
. Untuk menemukan dokumen yang cocok dengan search
dan salah satu sqlite
atau help
, Anda menggunakan tanda kurung sebagai berikut:
SELECT *
FROM posts
WHERE posts MATCH 'search AND (sqlite OR help)';
Code language: SQL (Structured Query Language) (sql)
Fungsi tambahan bawaan
SQLite menyediakan tiga fungsi tambahan bawaan yang dapat digunakan dalam kueri teks lengkap pada tabel FTS5.
bm25()
mengembalikan nilai yang mewakili keakuratan kecocokan saat ini, nilai yang lebih rendah berarti kecocokan yang lebih baik.highlight()
fungsi bantu mengembalikan salinan teks dengan istilah pencarian yang dikelilingi oleh markup tertentu mis.,istilah pencariansnippet()
memilih fragmen teks pendek untuk memaksimalkan jumlah istilah penelusuran yang dikandungnya.
Misalnya, kueri berikut menggunakan fungsi highlight() untuk menghias istilah penelusuran menggunakan tag:
SELECT highlight(posts,0, '<b>', '</b>') title,
highlight(posts,1, '<b>', '</b>') body
FROM posts
WHERE posts MATCH 'SQLite'
ORDER BY rank;
Code language: SQL (Structured Query Language) (sql)
Dalam tutorial ini, Anda telah mempelajari cara menggunakan fitur pencarian teks lengkap SQLite melalui modul tabel virtual FTS5.