在找不到Lucene的单字命中

时间:2013-12-06 11:34:59

标签: search lucene standardanalyzer

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

1 个答案:

答案 0 :(得分:1)

当你运行一句话:“快速的猫跳过懒惰的CAT6” 通过WhitespaceAnalyzer这就是它的作用:
[] [快] [猫] [跳跃] [翻过] [] [偷懒] [CAT6]

正如您所看到的,“Cat”在列表中显然属实,您应该能够找到它。你是怎么查询它的?在查询期间您使用的是哪种分析仪?