Je rencontre un problème lors de l'utilisation de SnowBallAnalyzer dans Lucene.NET. Cela fonctionne très bien pour certains mots, mais d'autres ne trouvent aucun résultat, et je ne sais pas trop comment approfondir ce sujet pour savoir ce qui se passe. Je suis en train de tester la recherche sur le fichier USDA Food Description qui peut être trouvé ici (http://www.ars.usda.gov/SP2UserFiles/Place/12354500/Data/SR23/asc/FOOD_DES.txt). J'utilise l'algorithme anglais stemming. Je reçois les résultats suivants lors de la recherche de "oeufs":Problème lié à 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
...
Ces résultats sont excellents. Cependant, je n'obtiens aucun résultat lors de la recherche de "pomme". Quand j'utilise le StandardAnalyzer, et que je recherche "apple", j'obtiens les résultats suivants.
Croissants, apple
Strudel, apple,
Babyfood, juice, apple
Babyfood, apple-banana juice
...
Pas les meilleurs résultats, mais au moins ça montre quelque chose. Quelqu'un sait-il pourquoi l'analyseur de bourrage filtrerait de telle manière que je n'obtiendrais aucun résultat? Edit: Voici mon code prototype que je travaille avec.
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();
}
Ceci est probablement le cas. Je vais confirmer et ensuite accepter. Merci! –