我正在制作一个系统,查看有关不同内容的文章,并挑选出一些关于它的描述。基本上很像百科全书。起初我遇到了一个问题,如果我搜索“猫”,我得到了很多文章,如“CAT5”,“CAT6”,“。cat”等等。然而,排名第一的仍是“猫”。我正在使用StandardAnalyzer。我收到了一个使用WhitespaceAnalyzer的提示,它解决了原来的问题,并让Lucene对CAT6等文章进行了点击,但现在文章“Cat”已经不在我的点击列表中了。为什么是这样?是否有任何建议,例如不同的分析仪?
编辑:搜索本身的代码:
public static String searchAbstracts(String input, int hitsPerPage) throws ParseException, IOException {
String query = input;
StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_41);
Query q = new QueryParser(Version.LUCENE_41, "article", analyzer).parse(query);
Directory index = new NIOFSDirectory(new File(INDEX_PATH));
IndexReader reader = IndexReader.open(index);
String resultSet = "";
IndexSearcher searcher = new IndexSearcher(reader);
TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
searcher.search(q, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
System.out.println("Found " + hits.length + " articles.");
for(int i=0;i<hits.length;++i) {
int docId = hits[i].doc;
Document d = searcher.doc(docId);
resultSet += d.get("desc") + " ";
System.out.println((i + 1) + ". " + d.get("article") + " :: Words from abstract: " + d.get("desc"));
}
return resultSet;
}
答案 0 :(得分:1)
当你运行一句话:“快速的猫跳过懒惰的CAT6”
通过WhitespaceAnalyzer这就是它的作用:
[] [快] [猫] [跳跃] [翻过] [] [偷懒] [CAT6]
正如您所看到的,“Cat”在列表中显然属实,您应该能够找到它。你是怎么查询它的?在查询期间您使用的是哪种分析仪?