MySQL - Pencarian Boolean Full-Text

Hai, para penggemar basis data yang bersemangat! Hari ini, kita akan meluncur ke dalam dunia yang menarik pencarian Boolean Full-Text MySQL. Sebagai guru komputer yang ramah di lingkungan sekitar Anda, saya sangat gembira untuk mengantar Anda dalam perjalanan ini. Jangan khawatir jika Anda baru belajar pemrograman - kita akan mulai dari dasar dan naik tingkat perlahan-lahan. Jadi, ambil secangkir kopi (atau teh, jika itu yang Anda suka), dan mari kita mulai!

MySQL - Boolean Fulltext Search

Apa Itu Pencarian Boolean Full-Text MySQL?

Bayangkan Anda mencari buku tertentu di perpustakaan besar. Daripada manually memeriksa setiap buku, bagaimana kalau Anda bisa katakan kepada petugas perpustakaan, "Saya ingin buku tentang naga, tetapi 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', 'A magical adventure with dragons and wizards'),
('Knight\'s Tale', 'A story of brave knights and their quests'),
('Enchanted Forest', 'Magical creatures in a mysterious forest');

SELECT * FROM books
WHERE MATCH(description) AGAINST('dragons +magical -knights' IN BOOLEAN MODE);

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

  • Mengandung kata 'dragons'
  • Harus mengandung kata 'magical' (itu apa yang dilakukan '+')
  • Tidak boleh mengandung kata 'knights' (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. Bayangkan ini sebagai petunjuk khusus untuk petugas perpustakaan basis data kami:

Operator Deskripsi Contoh
+ Harus mengandung kata ini +dragon
- Tidak boleh mengandung kata ini -knight
> Menambahkan relevansi >magic
< Mengurangi relevansi <forest
* Wildcard (cocok dengan semua akhiran) drag*
" " Fразa tepat "magic wand"
() Pengelompokan (+magic +wand) -broom

Mari kita lihat ini dalam aksi:

SELECT * FROM books
WHERE MATCH(description) AGAINST('>magic +creatures -knights ("enchanted forest")' IN BOOLEAN MODE);

Query ini mencari buku yang:

  • Lebih baik mengandung 'magic' (tetapi itu tidak diperlukan)
  • Harus mengandung 'creatures'
  • Tidak boleh mengandung 'knights'
  • Harus memiliki frasa tepat "enchanted forest"

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('magic dragons' IN BOOLEAN MODE) AS relevance
FROM books
WHERE MATCH(description) AGAINST('magic dragons' IN BOOLEAN MODE)
ORDER BY relevance DESC;

Query ini akan mengembalikan semua buku yang mengandung 'magic' atau 'dragons', diurutkan berdasarkan relevansi mereka terhadap kata-kata ini.

Pencarian Wildcard

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

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

Ini akan menemukan buku dengan kata-kata seperti 'magic', 'magical', 'mage', dan seterusnya.

Pencarian Fразa

Ketika Anda ingin menemukan frasa tepat, gunakan tanda kutip:

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

Ini hanya akan mengembalikan buku dengan frasa tepat "magical adventure".

Pencarian Boolean Full-Text Menggunakan Program Klien

Meskipun kita telah menggunakan query SQL secara langsung, dalam keadaan dunia nyata, Anda seringkali menggunakan program klien untuk berinteraksi dengan basis data Anda. Ini adalah contoh sederhana menggunakan library 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"Title: {row[1]}, Description: {row[2]}")

cursor.close()
conn.close()

search_books('+magic -knights')

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

Dan itu adalah yang Anda lihat, teman-teman! Kita telah berpergian melalui kerajaan Pencarian Boolean Full-Text MySQL, dari konsep dasar ke aplikasi praktis. Ingat, seperti segala jenis alat yang kuat, itu memerlukan latihan untuk menjadi ahli. Jadi, jangan takut untuk mencoba dan membuat kesalahan - itu adalah bagaimana kita belajar!

Sebelum kita selesai, ini adalah cerita kecil dari hari saya mengajar: Pernah saya punya murid yang kesulitan dengan pencarian basis data. Dia terus mencoba mencari jarum di gandum secara manual. Ketika saya memperkenalkannya ke Pencarian Full-Text, mata dia 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 seperti magis.

Terus latih, tetap curiga, dan selamat mencari!

Credits: Image by storyset