我正在制作一个系统,它可以浏览有关不同内容的文章并挑选出一些关于它的描述。基本上很像一本百科全书。起初我遇到了一个问题,如果我搜索“cat”,我会在“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;
}