MySQL - ngram Penyelesai Teks Penuh: Panduan untuk Pemula

Helo semua, ahli pangkalan data masa depan! Hari ini, kita akan memulakan perjalanan yang menarik ke dunia Penyelesai Teks Penuh ngram MySQL. Jangan risau jika anda baru dalam pengaturcaraan - saya akan menjadi panduan anda yang mesra, menjelaskan segala-galanya langkah demi langkah. Jadi, ambil secawan kopi, dan mari kita terjun!

MySQL - ngram Fulltext Parser

Penyelesai Teks Penuh ngram: Apa Yang Penting?

Bayangkan anda cuba mencari buku tertentu di perpustakaan besar. Bukankah hebat jika anda hanya boleh menaip beberapa perkataan dan segera menemui apa yang anda cari? Itulah tepatnya yang dilakukan oleh Penyelesai Teks Penuh ngram untuk pangkalan data!

Penyelesai ngram seperti pustakawan super pintar yang memecahkan teks kepada kepingan kecil (dipanggil ngram) dan membantu anda mencari melalui mereka dengan cepat dan cekap. Ia amat berguna untuk bahasa yang tidak menggunakan ruang antara perkataan, seperti bahasa Cina atau Jepun.

Apa itu ngram?

Ngram adalah urutan berterusan n item dari teks tertentu. Contohnya, jika kita mempunyai perkataan "hello" dan n = 2 (yang kita panggil bigram), kita akan mendapat:

  • he
  • el
  • ll
  • lo

Cantik, bukan? Sekarang, mari kita lihat bagaimana kita boleh menggunakannya dalam MySQL!

Mengkonfigurasi Saiz Token ngram

Sebelum kita mula menggunakan penyelesai ngram, kita perlu memberitahunya seberapa besar kita mahu ngram kita menjadi. Ini dipanggil saiz token.

Inilah cara kita boleh menetapkannya:

SET GLOBAL ngram_token_size = 2;

Ini menetapkan saiz ngram kita kepada 2 (bigram). Tetapi ingat, anda memerlukan keistimewaan khas untuk mengubah pembolehubah global. Jika anda baru bermula, pentadbir pangkalan data anda mungkin perlu melakukannya untuk anda.

Membuat Indeks FULLTEXT Menggunakan Penyelesai ngram

Sekarang kita telah menetapkan saiz token kita, mari kita membuat jadual dan menambah indeks FULLTEXT menggunakan penyelesai ngram:

CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200),
content TEXT,
FULLTEXT INDEX ngram_idx (content) WITH PARSER ngram
) ENGINE=InnoDB;

Dalam contoh ini, kita sedang membuat jadual yang dipanggil 'articles' dengan 'id', 'title', dan 'content' column. Keajaiban berlaku pada baris terakhir di mana kita membuat indeks FULLTEXT pada column 'content' menggunakan penyelesai ngram.

Pengendalian Ruang oleh Penyelesai ngram

Satu perkara menarik tentang penyelesai ngram adalah bagaimana ia mengendalikan ruang. Ia menganggapnya seperti mana-mana aksara lain. Jadi, "hello world" dengan bigram akan menjadi:

  • he
  • el
  • ll
  • lo
  • o
  • w
  • wo
  • or
  • rl
  • ld

Ini menjadikannya hebat untuk mencari frasa!

Pengendalian Perkataan Berhenti oleh Penyelesai ngram

Berbeza dengan beberapa penyelesai lain, penyelesai ngram tidak menggunakan perkataan berhenti. Perkataan berhenti adalah perkataan biasa seperti "the" atau "and" yang sering diabaikan dalam pencarian. Penyelesai ngram termasuk segala-galanya, yang boleh menjadi baik dan buruk bergantung kepada keperluan anda.

Pencarian Frasa oleh Penyelesai ngram

Mari kita mencuba pencarian frasa! Pertama, mari kita menambah beberapa data ke jadual kita:

INSERT INTO articles (title, content) VALUES
('MySQL Tutorial', 'MySQL adalah pangkalan data popular'),
('Python Guide', 'Python adalah bahasa pengaturcaraan');

Sekarang, mari kita cari "popular database":

SELECT * FROM articles
WHERE MATCH(content) AGAINST('popular database' IN BOOLEAN MODE);

Ini sepatutnya mengembalikan artikel MySQL Tutorial kita.

Pencarian Term oleh Penyelesai ngram

Kita juga boleh mencari term individu. Mari kita mencuba mencari "pengaturcaraan":

SELECT * FROM articles
WHERE MATCH(content) AGAINST('pengaturcaraan' IN BOOLEAN MODE);

Ini sepatutnya mengembalikan artikel Python Guide kita.

Pencarian Wildcard oleh Penyelesai ngram

Penyelesai ngram tidak menyokong pencarian wildcard dalam erti tradisional. Walau bagaimanapun, kerana ia memecahkan perkataan kepada kepingan kecil, ia masih boleh mencari padanan separa. Contohnya:

SELECT * FROM articles
WHERE MATCH(content) AGAINST('prog' IN BOOLEAN MODE);

Ini mungkin masih menemui artikel "pengaturcaraan" kita, walaupun kita hanya mencari sebahagian perkataan.

Penyelesai Teks Penuh ngram Menggunakan Program Pelanggan

Akhirnya, mari kita lihat bagaimana kita mungkin menggunakan penyelesai ngram dalam program Python:

import mysql.connector

# Sambung ke pangkalan data
cnx = mysql.connector.connect(user='nama_pengguna_anda', password='kata_laluan_anda',
host='127.0.0.1', database='pangkalan_data_anda')
cursor = cnx.cursor()

# Melakukan pencarian
query = "SELECT * FROM articles WHERE MATCH(content) AGAINST(%s IN BOOLEAN MODE)"
search_term = 'database'

cursor.execute(query, (search_term,))

# Cetak hasil
for (id, title, content) in cursor:
print(f"ID: {id}, Title: {title}, Content: {content}")

# Tutup sambungan
cursor.close()
cnx.close()

Program ini menyambung ke pangkalan data MySQL anda, melakukan pencarian menggunakan penyelesai ngram, dan mencetak hasilnya.

Dan di sini anda ada, semua! Kita telah melalui perjalanan melalui dunia Penyelesai Teks Penuh ngram dalam MySQL. Ingat, latihan menjadikan sempurna, jadi jangan takut untuk bereksperimen dengan konsep ini. Sebelum anda tahu, anda akan.parser dan mencari seperti seorang profesional!

Kaedah Penjelasan
SET GLOBAL ngram_token_size = n Mengkonfigurasi saiz token ngram
CREATE TABLE... FULLTEXT INDEX... WITH PARSER ngram Membuat jadual dengan indeks FULLTEXT menggunakan penyelesai ngram
INSERT INTO... VALUES... Memasukkan data ke dalam jadual
SELECT... WHERE MATCH(...) AGAINST(... IN BOOLEAN MODE) Melakukan pencarian teks penuh menggunakan penyelesai ngram

Selamat mengkod, dan semoga pertanyaan anda sentiasa mengembalikan hasil yang anda cari!

Credits: Image by storyset