Genel olarak, Lucene'deki herhangi bir analizör, tokenizer + stemmer + stop-word filtresidir.
Tokenizer , metninizi parçalara ayırır ve farklı çözümleyiciler farklı belirteçler kullanabileceğinden, farklı çıktı belirteç akışları , yani metin öbekleri dizisi elde edebilirsiniz . Örneğin , metni hiç bölmediğini ve tüm alanı tek bir belirteç olarak aldığından KeywordAnalyzer
bahsettiğiniz . Aynı zamanda, (ve diğer birçok çözümleyici) boşluk ve noktalama işaretlerini ayırma noktaları olarak kullanır. Örneğin, "Çok mutluyum" ifadesi için liste ["i", "am", "çok", "mutlu"] (veya buna benzer bir şey) üretecektir. Spesifik çözümleyiciler / belirteçler hakkında daha fazla bilgi için Java Belgelerine bakın .StandardAnalyzer
Kökler söz konusu bir kelimenin temelini elde etmek için kullanılır. Büyük ölçüde kullanılan dile bağlıdır. Örneğin, İngilizce'deki önceki cümle için ["i", "be", "veri", "happi"] gibi bir şey üretilecek ve Fransız "Je suis très heureux" için bir tür Fransız analizcisi (gibi SnowballAnalyzer
, başlatılmış "Fransızca" ile), ["je", "être", "tre", "heur"] üretir. Elbette, bir dilin çözümleyicisini başka bir dildeki metni köklendirmek için kullanırsanız, diğer dilin kuralları kullanılır ve stemmer yanlış sonuçlar verebilir. Bu, tüm sistemde başarısız değildir, ancak arama sonuçları daha az doğru olabilir.
KeywordAnalyzer
herhangi bir saplayıcı kullanmaz, tüm alanı değiştirmeden geçer. Bu nedenle, İngilizce metinde bazı kelimeleri arayacaksanız, bu analizörü kullanmak iyi bir fikir değildir.
Durdurma sözcükleri en sık kullanılan ve neredeyse yararsız sözcüklerdir. Yine, büyük ölçüde dile bağlıdır. İngilizce için bu kelimeler "a", "the", "I", "be", "have", vs.'dir. Durdurma kelimeleri filtreleri, arama sonuçlarında gürültüyü azaltmak için bunları simge akışından kaldırır, dolayısıyla son olarak "I ile "çok mutluyum" StandardAnalyzer
["veri", "happi"] listesine dönüştürülecek.
Ve KeywordAnalyzer
yine hiçbir şey yapmaz. Yani, KeywordAnalyzer
kimlik veya telefon numaraları gibi şeyler için kullanılır, ancak normal metin için kullanılmaz.
Ve gelince maxClauseCount
istisna, seni aramaya almak inanıyoruz. Bu durumda, büyük olasılıkla çok karmaşık arama sorgusundan kaynaklanmaktadır. Bunu birkaç sorguya bölmeyi deneyin veya daha düşük seviyeli işlevler kullanın.