Saya memerlukan saran mengenai cara mengatur data saya untuk pencarian teks yang efektif dan cepat.
Latar belakang
Saya memiliki aplikasi (dalam PHP) di mana pengguna dapat mengatur artikel dan secara dinamis membuat formulir dan bidang untuk tujuan itu. Artinya, satu artikel misalnya dapat memiliki atribut Jenis, Merek, Warna dan artikel lain misalnya dapat memiliki atribut Jenis, Bahan, Warna, Konten. Pengguna pada dasarnya dapat membuat atribut sebanyak yang dia suka...
Lalu saya harus bisa mencari dan mengurutkan di antara atribut-atribut yang "tidak diketahui" ini. Saya juga harus dapat membaca kembali semua atribut jika pengguna ingin mengedit artikel.
Solusi saya
Ide pertama saya (dan sejauh ini satu-satunya ide) adalah menyandikan semua atribut ke dalam satu bidang TEXT
dengan indeks FULLTEXT
(harus MyISAM berfungsi), seperti:
__Type="3",__Brand="Nokia",__Color="6"
__Type="2",__Material="7",Color="2",Content="MP3 Player,2 Apples, 1 book: Larry King"
Atribut akan mendapatkan awalan dan/atau postfix agar tidak tertukar dengan nilai dalam atribut. Atau buat serial atribut dengan JSON.
Lalu saya bisa membuat kueri berdasarkan atribut yang dipilih seperti:
SELECT * FROM Articles a
WHERE Attribute LIKE '%__TYPE="2"%'
AND Attribute LIKE '%__Color="2"%'
Jika suatu atribut kosong, atribut tersebut tidak akan disertakan dan hal ini memungkinkan untuk menyertakan pencarian pada semua artikel yang memiliki kumpulan atribut tertentu, berapa pun nilainya.
Masalah
Soal atau tidak, yang saya khawatirkan adalah performa pencarian saat database dipenuhi ribuan artikel.
Masalah lainnya juga adalah mencari kata tertentu di dalam atribut tertentu, seperti:
Content="MP3 Player,2 Apel, 1 buku: Larry King"
Katakanlah saya hanya ingin mendapatkan baris di mana atribut Content memiliki frase "Larry King" di suatu tempat. Saya rasa saya tidak bisa melakukannya dalam pertanyaan SQL yang sama tanpa mendapatkan kecocokan pada semua baris yang memiliki "Larry King" di suatu tempat.
Saya terbuka untuk segala jenis saran/diskusi mengenai tabel, bidang, dan hubungan apa yang harus saya buat untuk mencapai tujuan yang dijelaskan.
Terima kasih.