MySQL - Pencarian Boolean Full-Text

Halo, para entusiastik basis data yang sedang berkembang! Hari ini, kita akan memantulkan ke dunia yang menarik pencarian Boolean Full-Text MySQL. Sebagai guru komputer yang ramah di lingkungan sekitar Anda, saya sangat gembira untuk memandu Anda dalam perjalanan ini. Jangan khawatir jika Anda baru dalam pemrograman – kita akan mulai dari dasar dan naik tingkat perlahan-lahan. Jadi, ambil secangkir kopi (atau teh, jika itu hal Anda), dan mari kita mulai!

MySQL - Boolean Fulltext Search

Apa Itu Pencarian Boolean Full-Text MySQL?

Bayangkan Anda mencari buku tertentu di perpustakaan besar. Daripada secara manual memeriksa setiap buku, bagaimana kalau Anda bisa mengatakan ke petugas perpustakaan, "Saya ingin buku tentang naga, tapi bukan tentang ksatria, dan harus menyebutkan sihir"? Itu sebenarnya apa yang dilakukan Pencarian Boolean Full-Text MySQL untuk basis data Anda!

Pencarian Boolean Full-Text MySQL adalah fitur yang kuat yang memungkinkan Anda mencari kata-kata atau frasa tertentu dalam jumlah besar data teks. Itu seperti memiliki petugas perpustakaan super cerdas untuk basis data Anda yang dapat cepat menemukan persis apa yang Anda cari.

Mari kita mulai dengan contoh sederhana:

CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
description TEXT,
FULLTEXT(description)
);

INSERT INTO books (title, description) VALUES
('The Dragon\'s Quest', 'Sebuah petualangan magis dengan naga dan penyihir'),
('Knight\'s Tale', 'Sebuah cerita tentang ksatria yang berani dan petualangannya'),
('Enchanted Forest', 'Kreatur magis di hutan yang mistis');

SELECT * FROM books
WHERE MATCH(description) AGAINST('naga +magis -ksatria' IN BOOLEAN MODE);

Dalam contoh ini, kita menciptakan tabel 'books' dan menambahkan beberapa data contoh. Query terakhir adalah tempat magik terjadi. Itu mencari buku yang:

  • Mengandung kata 'naga'
  • Harus mengandung kata 'magis' (itu apa yang dilakukan '+')
  • Tidak boleh mengandung kata 'ksatria' (itu apa yang dilakukan '-')

Hasilnya? Itu akan mengembalikan 'The Dragon's Quest' karena itu cocok dengan semua kriteria ini.

Operator Pencarian Boolean Full-Text MySQL

Sekarang, mari kita lihat beberapa operator yang bisa kita gunakan dalam Pencarian Boolean Full-Text. Picturing ini sebagai petunjuk khusus untuk petugas perpustakaan basis data kita:

Operator Deskripsi Contoh
+ Harus mengandung kata ini +naga
- Tidak boleh mengandung kata ini -ksatria
> Menambahkan relevansi >magis
< Mengurangi relevansi <hutan
* Wildcard (cocok dengan semua akhiran) drag*
" " Fразa eksak "magis pedang"
() Pengelompokan (+magis +pedang) -broom

Mari kita lihat ini dalam aksi:

SELECT * FROM books
WHERE MATCH(description) AGAINST('>magis +kreatur -ksatria ("hutan terjamah")' IN BOOLEAN MODE);

Query ini mencari buku yang:

  • Lebih baik mengandung 'magis' (tetapi bukan wajib)
  • Harus mengandung 'kreatur'
  • Tidak boleh mengandung 'ksatria'
  • Harus memiliki frasa eksak "hutan terjamah"

Anda bisa menebak buku mana yang akan dikembalikan? Benar, 'Enchanted Forest'!

Fitur Pencarian Boolean Full-Text MySQL

Relevansi Penempatan

Salah satu fitur yang paling menarik dari Pencarian Boolean Full-Text adalah penempatan relevansi. MySQL tidak hanya menemukan hasil yang cocok; itu juga menempatkan mereka berdasarkan seberapa baik mereka cocok dengan kriteria pencarian.

SELECT *, MATCH(description) AGAINST('magis naga' IN BOOLEAN MODE) AS relevansi
FROM books
WHERE MATCH(description) AGAINST('magis naga' IN BOOLEAN MODE)
ORDER BY relevansi DESC;

Query ini akan mengembalikan semua buku yang mengandung 'magis' atau 'naga', ditempatkan berdasarkan relevansi mereka terhadap kata ini.

Pencarian Wildcard

Ingat operator '*' yang kita bicarakan sebelumnya? Itu sangat berguna untuk menemukan kata dengan akhiran yang berbeda:

SELECT * FROM books
WHERE MATCH(description) AGAINST('mag*' IN BOOLEAN MODE);

Ini akan menemukan buku dengan kata-kata seperti 'magis', 'magical', 'mage', dan lainnya.

Pencarian Fразa

Ketika Anda ingin menemukan frasa eksak, gunakan tanda kutip:

SELECT * FROM books
WHERE MATCH(description) AGAINST('"petualangan magis"' IN BOOLEAN MODE);

Ini hanya akan mengembalikan buku dengan frasa eksak "petualangan magis".

Pencarian Boolean Full-Text Menggunakan Program Klien

Meskipun kita telah menggunakan query SQL secara langsung, dalam konteks dunia nyata, Anda seringkali akan menggunakan program klien untuk berinteraksi dengan basis data Anda. Berikut adalah contoh sederhana menggunakan pustaka mysql-connector di Python:

import mysql.connector

def search_books(keyword):
conn = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="your_database"
)
cursor = conn.cursor()

query = "SELECT * FROM books WHERE MATCH(description) AGAINST(%s IN BOOLEAN MODE)"
cursor.execute(query, (keyword,))

results = cursor.fetchall()
for row in results:
print(f"Judul: {row[1]}, Deskripsi: {row[2]}")

cursor.close()
conn.close()

search_books('+magis -ksatria')

Fungsi ini terhubung ke basis data MySQL Anda, melakukan Pencarian Boolean Full-Text, dan mencetak hasilnya.

Dan begitu juga, teman-teman! Kita telah melakukan perjalanan melalui realm Pencarian Boolean Full-Text MySQL, dari konsep dasar hingga aplikasi praktis. Ingat, seperti semua alat kuat, itu memerlukan latihan untuk dikuasai. Jadi jangan takut untuk mencoba dan membuat kesalahan – itu adalah bagaimana kita belajar!

Sebelum kita selesai, ini cerita kecil dari hari saya mengajar: Pernah saya punya murid yang kesulitan dengan pencarian basis data. Dia terus mencoba untuk menemukan jarum di gandum secara manual. Ketika saya memperkenalkannya ke Pencarian Full-Text, mata nya bersinar seperti dia baru menemukan sihir. Dan dalam hal ini, dia benar-benar melakukan itu! Karena itu apa yang teknologi yang bagus lakukan – itu membuat yang mustahil tampak magis.

Terus latih, tetap curiga, dan selamat mencari!

Credits: Image by storyset