Secara umum, penganalisis apa pun di Lucene adalah tokenizer + stemmer + filter stop-words.
Tokenizer membagi teks Anda menjadi beberapa bagian, dan karena penganalisis yang berbeda dapat menggunakan tokenizer yang berbeda, Anda bisa mendapatkan aliran token keluaran yang berbeda , yaitu urutan potongan teks. Misalnya, KeywordAnalyzer
Anda menyebutkan tidak membagi teks sama sekali dan mengambil semua bidang sebagai satu token. Pada saat yang sama, StandardAnalyzer
(dan sebagian besar penganalisis lainnya) menggunakan spasi dan tanda baca sebagai titik pemisah. Misalnya, untuk frase "Saya sangat senang" itu akan menghasilkan daftar ["i", "am", "very", "happy"] (atau semacamnya). Untuk informasi lebih lanjut tentang penganalisis / pembuat token tertentu, lihat Dokumen Java -nya .
Stemmer digunakan untuk mendapatkan dasar kata yang dimaksud. Itu sangat tergantung pada bahasa yang digunakan. Misalnya, untuk frasa sebelumnya dalam bahasa Inggris akan ada sesuatu seperti ["i", "be", "veri", "happi"] diproduksi, dan untuk bahasa Prancis "Je suis très heureux" semacam penganalisis bahasa Prancis (seperti SnowballAnalyzer
, diinisialisasi dengan "Prancis") akan menghasilkan ["je", "être", "tre", "heur"]. Tentu saja, jika Anda akan menggunakan penganalisis dari satu bahasa untuk membendung teks dalam bahasa lain, aturan dari bahasa lain akan digunakan dan stemmer dapat menghasilkan hasil yang salah. Tidak semua sistem gagal, tetapi hasil pencarian mungkin kurang akurat.
KeywordAnalyzer
tidak menggunakan stemmer, ia melewati semua bidang tanpa modifikasi. Jadi, jika Anda akan mencari beberapa kata dalam teks bahasa Inggris, bukan ide yang baik untuk menggunakan penganalisis ini.
Kata - kata berhenti adalah kata - kata yang paling sering dan hampir tidak berguna. Sekali lagi, ini sangat bergantung pada bahasa. Untuk bahasa Inggris, kata-kata ini adalah "a", "the", "I", "be", "have", dll. Filter kata-berhenti menghapusnya dari aliran token untuk mengurangi noise di hasil penelusuran, jadi akhirnya frasa kami "I saya sangat senang "dengan StandardAnalyzer
akan diubah menjadi daftar [" veri "," happi "].
Dan KeywordAnalyzer
sekali lagi tidak melakukan apa-apa. Jadi, KeywordAnalyzer
digunakan untuk hal-hal seperti ID atau nomor telepon, tetapi tidak untuk teks biasa.
Dan untuk maxClauseCount
pengecualian Anda , saya yakin Anda mendapatkannya saat mencari. Dalam kasus ini, kemungkinan besar karena kueri penelusuran yang terlalu kompleks. Cobalah untuk membaginya menjadi beberapa kueri atau gunakan fungsi yang lebih rendah.
Dalam perspektif saya, saya telah menggunakan
StandAnalyzer
danSmartCNAnalyzer
. Karena saya harus mencari teks dalam bahasa Cina. Jelas,SmartCnAnalyzer
lebih baik dalam menangani bahasa Mandarin. Untuk tujuan yang berbeda, Anda harus memilih penganalisis yang paling tepat.sumber