我在Lucene.NET中使用SnowBallAnalyzer遇到了问题。它对某些单词很有用,但是其他单词根本没有找到任何结果,我不知道如何进一步深入研究这些内容。我正在测试美国农业部食品描述文件的搜索,该文件可在此处找到(http://www.ars.usda.gov/SP2UserFiles/Place/12354500/Data/SR23/asc/FOOD_DES.txt)。我正在使用英语词干算法。搜索“鸡蛋”时,我得到以下结果:
Bagels, egg
Bread, egg
Egg, whole, raw, fresh
Egg, white, raw, fresh
Egg, yolk, raw, fresh
Egg, yolk, raw, frozen
Egg, whole, cooked, fried
...
这些结果很棒。但是在搜索“apple”时我根本没有得到任何结果。当我使用StandardAnalyzer并搜索“apple”时,我得到以下结果。
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();
}
答案 0 :(得分:5)
您确定使用Lucene.Net.Analysis.Snowball.SnowballAnalyzer("English")
来编写索引吗?您必须使用相同的分析器来编写和查询索引。