Masalahnya
Apabila cuba melakukan carian teks penuh pada jadual MySQL yang mengandungi maklumat produk, keputusan tidak dikembalikan walaupun terdapat istilah yang sepadan. Sebagai contoh, carian untuk "pen" atau "satu pen" dalam lajur "Produk" tidak mengembalikan hasil.
Penyiasatan
Setelah memeriksa skema jadual, didapati bahawa lajur "Produk" ditakrifkan sebagai indeks FULLTEXT. Walau bagaimanapun, jadual hanya mengandungi dua baris data, yang termasuk istilah "pen" dan "satu pen."
Penyelesaian
1. Meningkatkan Kepelbagaian Data:
Algoritma carian teks penuh memerlukan jumlah data yang mencukupi untuk mengesan corak yang bermakna. Dengan hanya dua baris data, algoritma tidak dapat membezakan antara perkataan biasa dan perkataan luar biasa, mengakibatkan hasil carian yang lemah.
Contoh:
CREATE TABLE testproduct ( Id VARCHAR(16), prod_name TEXT, ProductIdType VARCHAR(8), PRIMARY KEY (Id), FULLTEXT (prod_name) ) ENGINE=MyISAM; insert into testproduct (id,prod_name,productidtype) values ('B00005N5PF','one pen and a good price for a pen','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('B570J5XS3C',null,'ASIN');
Dengan memasukkan lebih banyak data dengan pelbagai istilah dan frasa, algoritma boleh mengklasifikasikan perkataan dengan lebih baik dan meningkatkan carian ketepatan.
2. Mengatasi Kata Henti:
MySQL mengekalkan senarai perkataan biasa, dikenali sebagai kata henti, yang biasanya dikecualikan daripada carian teks penuh. Walau bagaimanapun, dalam sesetengah kes, perkataan henti mungkin berkaitan dengan carian.
Contoh:
-- Disable stopword filtering SET ft_stopword_file = ''; -- Rebuild FULLTEXT indexes ALTER TABLE testproduct REBUILD INDEX prod_name;
Dengan mengatasi senarai hentian lalai, istilah yang berkaitan seperti "tahun " atau "skor" boleh disertakan dalam hasil carian.
3. Menggunakan Mod Boolean dan Bahasa Asli:
Mod Boolean memerlukan padanan tepat, manakala mod bahasa semula jadi membenarkan variasi dan sinonim. Menggunakan mod bahasa semula jadi boleh meluaskan hasil carian.
Contoh:
SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('+harpoon +article' IN NATURAL LANGUAGE MODE);
Dengan menggunakan teknik ini, fungsi carian teks penuh boleh dipertingkatkan untuk memberikan yang tepat dan hasil yang bermakna untuk julat pertanyaan yang lebih luas.
Atas ialah kandungan terperinci Mengapa Carian Teks Penuh MySQL Saya Gagal dengan Data Tidak Mencukupi dan Kata Berhenti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!