如何解决Lucene.NET发芽问题
| 我在Lucene.NET中使用SnowBallAnalyzer遇到问题。对于某些单词来说,它的效果很好,但是对于其他单词,它根本找不到任何结果,而且我不确定如何进一步对此进行深入研究以发现正在发生的事情。我正在测试对USDA食品描述文件的搜索,该文件可在此处找到(http://www.ars.usda.gov/SP2UserFiles/Place/12354500/Data/SR23/asc/FOOD_DES.txt)。我正在使用英语词干算法。搜索\“鸡蛋\”时,我得到以下结果:Bagels,egg
Bread,egg
Egg,whole,raw,fresh
Egg,white,yolk,frozen
Egg,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();
}
解决方法
您确定使用ѭ3来编写索引吗?您必须使用相同的分析器来编写和查询索引。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。