2011-05-31 28 views
5

Ben Lucene.NET SnowBallAnalyzer kullanarak bir sorunla karşılaşıyorum. Bazı kelimeler için harika çalışıyor, ancak diğerleri üzerinde hiçbir sonuç bulamıyor ve neler olduğunu öğrenmek için bunu nasıl daha fazla kazacağımdan emin değilim. Burada bulabileceğiniz USDA Food Description dosyasındaki araştırmayı test ediyorum (http://www.ars.usda.gov/SP2UserFiles/Place/12354500/Data/SR23/asc/FOOD_DES.txt). İngilizce stemming algoritmasını kullanıyorum. "Yumurta" için arama yaparken şu sonuçları elde ederim:Lucene.NET problem yaratıyor

Bu sonuçlar mükemmeldir. Ancak "elma" ararken hiçbir sonuç almam. StandardAnalyzer'ı kullandığımda ve "apple" ı aradığımda aşağıdaki sonuçları elde ederim.

Croissants, apple 
Strudel, apple, 
Babyfood, juice, apple 
Babyfood, apple-banana juice 
... 

En iyi sonuç değil, en azından bir şey gösteriyor. Herhangi bir sonuç elde etmeyecek şekilde neden kaynak yapan analizin neden filtreleyeceğini bilen var mı?

Düzenleme: İşte çalıştığım prototip kod İşte.

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(); 
} 

cevap

5

Endeksinizi yazmak için Lucene.Net.Analysis.Snowball.SnowballAnalyzer("English")'u kullandığınızdan emin misiniz? İndeksi yazmak ve sorgulamak için aynı analiz cihazını kullanmanız gerekir.

+0

Bu muhtemelen budur. Onaylayacağım ve kabul edeceğim. Teşekkürler! –