0

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

1 回答 1

1

当你通过 WhitespaceAnalyzer 运行一个句子:“The quick Cat jumped over the lazy CAT6”时,这就是它对它的作用:
[The] [quick] [Cat] [jumped] [over] [the] [lazy] [CAT6]

如您所见,列表中的“猫”显然是真实案例,您应该能够找到它。你是怎么查询的?在查询期间,您使用的是什么分析仪?

于 2013-12-06T13:14:03.760 回答