Jawaban singkatnya adalah karena pencarian teks hampir tidak memiliki kesamaan dengan bagaimana database tradisional dirancang dan digunakan. Seseorang yang ace dalam membuat / menggunakan RDBMS seperti domba yang disembelih ketika mereka mendekati pengambilan teks untuk pertama kalinya.
(Maaf untuk jawaban panjangnya, tapi aku sakit di tempat tidur hari ini dan aku tidak punya hal lain untuk dilakukan.)
Berikut ini dapat dengan mudah berada di bawah TL; DR, tetapi jika Anda punya waktu dan minat, yang berikut adalah bagian dari jawaban yang lebih panjang. Catatan: Saya berbicara tentang penerapan sistem pencarian informasi komersial mulai tahun 1986. Kami sukses secara teknis, tetapi gagal dalam pemasaran.
Melakukan IR (Pengambilan Informasi) dengan benar mengharuskan Anda mulai dengan memikirkan apa yang Anda cari dan bagaimana Anda akan menemukannya menggunakan mekanisme kueri Anda. Hal ini mungkin terdengar mudah, tetapi itu adalah sesuatu tapi mudah. Berikut adalah beberapa hal yang harus Anda putuskan sebelum Anda mulai memindai dokumen (atau bidang) Anda.
- Apakah kasus penting? Apakah DoD sama dengan dod? Bagaimana dengan "nyala api" dan "FLAME" (cologne berdasarkan Burger King Whopper (ya, sungguh)).
- Token apa yang akan Anda indeks? Anda jelas ingin mengindeks "ayah". Anda mungkin ingin mengindeks "daddy123". Apakah Anda ingin mengindeks "123"? "12.3"? "192.168.1.1"?
- Bagaimana Anda menghadapi hal-hal seperti tanda hubung? Contoh yang agak ketinggalan zaman adalah "basis data", "basis data", dan "basis data", yang semuanya digunakan secara bersamaan pada tahun 1986.
- Jika bahasa permintaan Anda mendukung konsep "Temukan A dalam kalimat yang sama dengan B", bagaimana Anda menentukan jeda kalimat? Meskipun '?' dan '!' cukup mudah, itu adalah menyebalkan. Pikirkan tentang hal-hal seperti "Tuan", "2.", "dll.", Dll.
- Apakah Anda akan mendukung stemming? Jika demikian, seberapa hati-hati Anda untuk tidak secara tidak sengaja mengubah POS (Bagian Bicara)? Misalnya "kucing" dapat berakar ke "kucing", tetapi "kerai" mungkin atau mungkin tidak berakar pada "kebutaan". Jika itu adalah kata kerja ("Dia membutakan saya") maka Anda dapat membendung, tetapi jika itu adalah kata benda ("Saya suka kerai Anda) Anda tidak bisa (atau setidaknya tidak seharusnya). Stemming sangat menggoda, tetapi itu adalah rawa dari Orde Pertama.
- Bahasa apa yang akan Anda dukung? Apa yang berhasil dalam bahasa Inggris dapat gagal dalam waktu yang lama baik dalam bahasa Prancis atau Jerman, meskipun anehnya itu akan cenderung berhasil untuk Jepang dalam representasi Hepburn Romanji .
Dan daftarnya terus bertambah.
Maka kita harus memikirkan bahasa permintaan kita. Mungkin terlihat bahwa jika semua yang Anda dukung adalah Boolean sederhana maka itu harus mudah, tetapi satu hal yang cukup banyak disepakati secara universal adalah bahwa Boolean murni menghisap teks. Misalnya, Anda akan memerlukan operator tambahan untuk menentukan pemesanan dan jarak, dan anak laki-laki, oh, anak laki-laki itu pernah membuat hidup lebih rumit. Anda juga perlu tahu bagian apa yang sedang Anda geluti - judul, tajuk, badan, dll. - yang mengarah ke segala macam kesenangan parsing khusus koleksi. Tetapi sekarang tidak lagi cukup untuk hanya memiliki daftar token yang terjadi dalam dokumen, Anda harus tahu di manadalam dokumen itu terjadi. Ini menghasilkan sebuah tupel alamat (docID, sectionID, para-in-section, kalimat-dalam-para, kata-dalam-kalimat). Secara efisien menyimpan dan mencari informasi ini dapat memperoleh koleksi non-mainan.
Lalu ada struktur sebenarnya dari penyimpanan data Anda. Sistem teks biasanya diimplementasikan sebagai "inversi penuh" dari dokumen. Berapa banyak indeks yang dimiliki oleh rata-rata DB? 10? 50? 500? Di IR tidak jarang memiliki 5.000.000 atau lebih indeks, satu untuk setiap token yang terpisah. Dan token apa pun yang diberikan dapat memiliki 1 instance (mis. "Narfle" atau "garthok") atau 10.000.000 instance (mis. "The"). Ini berarti bahwa seluruh metode Anda untuk membuat dan memperbarui indeks harus secepat kilat atau Anda akan tenggelam ke dalam rawa. Dan Anda masih memiliki banyak masalah lain yang dilakukan oleh DB tradisional: manajemen ruang disk, pemulihan kerusakan, snapshot yang koheren dari sistem yang sedang berjalan, dll., Dll.
Akhirnya ada peringkat hasil. Hasil yang tidak di-set yang ditetapkan dari kueri Boolean terhadap koleksi besar tidak berguna bagi manusia. Mungkin bermanfaat untuk suatu program, tetapi bukan itu yang saya hadapi. Meskipun sistem kami menerapkan Boolean, nilai jual kami adalah bahwa kami adalah sistem pertama yang tersedia secara komersial untuk mendukung pencarian kesamaan , berdasarkan Cosine Coefficient . Matematika dan logika jenis pencarian ini (pada dasarnya produk titik yang dinormalisasi dari vektor kueri terhadap jutaan vektor dokumen) memerlukan pendekatan yang sangat berbeda untuk representasi dan penyimpanan data daripada Boolean - jelas bukan sesuatu yang tersedia di DB rata-rata Anda.
Semua ini (dan lebih banyak lagi) adalah alasan "pencarian teks" dan "database" hampir tidak termasuk dalam kalimat yang sama. Saya pikir Anda akan lebih baik memilih database yang baik untuk kebutuhan "normal" Anda, dan kemudian menggunakan sistem IR eksternal untuk mengindeks / mencari "dokumen" di DB utama Anda.