MySQL penuh teks pencarian

Hari ini saya bermain untuk mengoptimalkan lambat SQL jenis permintaan

SELECT * FROM 'table' WHERE `field` LIKE '%word%'

Di mana adalah menyusahkan satu saat di sini – Bagian terakhir kata % ‘ %’ dan dalam bahkan kepastian karakter % sebelum kata, untuk itu kita lakukan. Simbol wildcard % ,sebelum nilai apapun, aplikasi kami langsung menterjemahkan langsung ke lambat, karena cara ini aplikasi berhenti kita untuk menggunakan indeks dari. Karena selalu ada solusi, tetapi tidak selalu jelas 😆 umumnya MySQL Anda memiliki solusi untuk masalah ini dengan fulltext pencarian Pengindeksan. Bagaimana adalah perubahan bidang ada banyak ditulis dalam dokumentasi, Tapi dalam terburu-buru saya akan menjelaskan bagaimana saya mengubah atas permintaan, karena kami akan mendapatkan sedikit drama akhirnya. Membuat lucu sebagaimana berlaku fulltext bidang, query yang perlu diubah dalam bentuk:

SELECT * FROM `table` WHERE MATCH (field) AGAINST ('word')

Jadi struktur yang jelas dan tidak perlu untuk tidak perlu diskusi. Query di atas akan masuk ke dalam angkatan, Jika kata, yang Anda membuat permintaan setidaknya 4 simbol, Ini adalah nilai default, Jika Anda ingin mengubahnya, Anda harus menentukan nilai, Anda ingin di saya. cnf di bagian [mysqld] dengan deklarasi ft_min_word_len= 3 atau 2, 1 bukan pilihan yang baik jelas 😉 . Setelah Anda mengubah nilai dan restart server mysql-kebutuhan untuk melakukan perbaikan tabel, dalam rangka untuk pengindeksan baru masuk ke dalam gaya. Di sini semua jelas: Apakah Anda mengubah, Mereset, Indeks rebildvam dan membuat saya permintaan dan kembali 0 Memeriksa sejalan dengan 😀

SHOW VARIABLES

Saya melihat bahwa nilai-nilai, Aku sudah meminta telah masuk ke dalam gaya, Indeks rebildvam lagi – hasil yang sama. Benci 🙄, sangat tidak nyaman. ОТ ТУК НАТАТЪК ЗАПОЧНА ЕДНО ГОЛЯМО РУГАЕНЕ И РОВЕНЕ DINING КЛЮЧА DINING БАРАКАТА 😀 КОЙТО СЕ ОКАЗА ДОСТА, ДОСТА ИНТЕРЕСЕН. КАТО ЦЯЛО, КАТО ЗАПОЧНАХ ДА ЧЕТА ДОКУМЕНТАЦИЯТА DINING НЕ ЗНАМ КОЙ ПЪТ И СТИГНАХ ДО ЕДИН ИНТЕРЕСЕН ПАСАЖ

Sebuah teknik works terbaik dengan koleksi besar (Sebenarnya, itu dibuat dengan hati-hati menantikan cara ini). Untuk tabel sangat kecil, kata distribusi tidak memadai mencerminkan nilai semantik, dan model ini mungkin kadang-kadang menghasilkan hasil yang aneh. Misalnya, Walaupun kata "MySQL" hadir di setiap baris dari tabel artikel yang ditampilkan sebelumnya, pencarian untuk kata menghasilkan tidak ada hasil

BEAM 😳 memberikan nampan kecil – Itu masih tes. Dalam tabel Naših aplikasi besar dengan lebih dari 2 000 000 order dan hal-hal yang ada sedang tidur. Baik itu sudah jelas masalah. Untuk memperjelas solusi, Saya akan menyebutkan secara singkat, yang mendukung pencarian teks lengkap 3 Mode lanjutan BOOLEAN , EKSPRESI dan BAHASA ALAMI sebagai karya-karya terakhir secara default. Tentang modus yang berbeda, Anda dapat memeriksa dokumentasi, Saya akan menjelaskan dengan 2-3 kata-kata untuk BOOLEAN karena kunci. Mendukung logical operator dari jenis dan, ATAU , TIDAK dan seterusnya dan dapat membuat beberapa sihir dengan frase pencarian, untuk memiliki, ada lain, dll.. Mendukung dan simbol *, itu adalah setara dengan karakter wildcard % 😉 sangat berguna, Ketika istilah pencarian berada dalam panjang ft_min_word_len atau nampan kecil ;). Setidaknya untuk saya di atas meja dengan tentang 100 garis adalah melakukan pekerjaan yang sempurna. Satu-satunya hal tersisa untuk melihat dan aplikasi selesai:

SELECT * FROM `table` WHERE MATCH (field)
AGAINST ('*word*' IN BOOLEAN MODE)

Sekarang inilah waktu pengindeksan bekerja dengan kami karakter wildcard – Jawabannya adalah saya tidak tahu. Saya pikir pada prinsipnya, sebagai, karena itu tidak ditentukan dalam dokumentasi, Tapi dalam dokumentasi rupanya tidak mengatakan atau menunjukkan banyak hal 😀

Ditingkatkan oleh Zemanta

2 comments

    1. Е при големи таблици вече има други решения 😉 partitions да речем или други механизмни за fulltext search като Sphinx

Tinggalkan balasan

Alamat email Anda tidak akan dipublikasikan. Kolom yang harus diisi ditandai *

anti SPAM *