5
我在Lucene.NET中使用SnowBallAnalyzer遇到問題。它適用於某些單詞,但其他單詞根本找不到任何結果,我不確定如何進一步深入瞭解發生的情況。我正在測試美國農業部食品描述文件的搜索,可以在這裏找到(http://www.ars.usda.gov/SP2UserFiles/Place/12354500/Data/SR23/asc/FOOD_DES.txt)。我正在使用英文詞幹算法。當搜索「雞蛋」時,我得到以下結果:Lucene.NET詞幹問題
Bagels, egg
Bread, egg
Egg, whole, raw, fresh
Egg, white, raw, fresh
Egg, yolk, raw, fresh
Egg, yolk, raw, frozen
Egg, whole, cooked, fried
...
這些結果非常好。但是,當搜索「蘋果」時,我根本沒有得到任何結果。當我使用StandardAnalyzer,並搜索「蘋果」時,我得到以下結果。
Croissants, apple
Strudel, apple,
Babyfood, juice, apple
Babyfood, apple-banana juice
...
不是最好的結果,但至少它顯示了一些東西。任何人都知道爲什麼干擾分析器會以這樣一種方式進行過濾,以至於我不會得到任何結果?
編輯:這是我正在使用的原型代碼。
static string[] Search(string searchTerm)
{
//Lucene.Net.Analysis.Analyzer analyzer = new Lucene.Net.Analysis.Snowball.SnowballAnalyzer("English");
Lucene.Net.Analysis.Analyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer();
Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "text", analyzer);
Lucene.Net.Search.Query query = parser.Parse(searchTerm);
Lucene.Net.Search.Searcher searcher = new Lucene.Net.Search.IndexSearcher(Lucene.Net.Store.FSDirectory.Open(new DirectoryInfo("./index/")), true);
var topDocs = searcher.Search(query, null, 10);
List<string> results = new List<string>();
foreach(var scoreDoc in topDocs.scoreDocs)
{
results.Add(searcher.Doc(scoreDoc.doc).Get("raw"));
}
return results.ToArray();
}
這可能是它。我會確認並接受。謝謝! – 2011-06-01 00:53:19