2011-05-31 87 views
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(); 
} 

回答

5

您確定您使用Lucene.Net.Analysis.Snowball.SnowballAnalyzer("English")來編寫索引嗎?您必須使用相同的分析器來編寫和查詢索引。

+0

這可能是它。我會確認並接受。謝謝! – 2011-06-01 00:53:19