2011-05-31 13 views
5

Tengo un problema con el SnowBallAnalyzer en Lucene.NET. Funciona muy bien para algunas palabras, pero otras no encuentra ningún resultado, y no estoy seguro de cómo profundizar más en esto para descubrir qué está sucediendo. Estoy probando la búsqueda en el archivo de descripción de alimentos del USDA que se puede encontrar aquí (http://www.ars.usda.gov/SP2UserFiles/Place/12354500/Data/SR23/asc/FOOD_DES.txt). Estoy usando el algoritmo de derivación inglés. Obtengo los siguientes resultados cuando busco "huevos":Lucene.NET problema de origen

Bagels, egg 
Bread, egg 
Egg, whole, raw, fresh 
Egg, white, raw, fresh 
Egg, yolk, raw, fresh 
Egg, yolk, raw, frozen 
Egg, whole, cooked, fried 
... 

Esos resultados son geniales. Sin embargo, no obtengo ningún resultado cuando busco "apple". Cuando uso el StandardAnalyzer y busco "apple" obtengo los siguientes resultados.

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

No son los mejores resultados, pero al menos muestran algo. ¿Alguien sabe por qué el analizador de fugas se estaría filtrando de tal manera que no obtendría ningún resultado?

Editar: Aquí está el prototipo de código con el que estoy trabajando.

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

Respuesta

5

¿Estás seguro de que usaste Lucene.Net.Analysis.Snowball.SnowballAnalyzer("English") para escribir tu índice? Debe usar el mismo analizador para escribir y consultar el índice.

+0

Esto es probablemente. Confirmaré y luego aceptaré. ¡Gracias! –

Cuestiones relacionadas