在lucene中搜索索引文档时如何获取唯一文档

时间:2014-09-02 22:28:08

标签: lucene

我需要索引文档并搜索它们。我有多个字段要查询。当我搜索索引文件时,我正在重复文档。这就是我查询的方式:

MultiFieldQueryParser parser = new MultiFieldQueryParser( Version.LUCENE_40, new String[] {"title", "abs"}, analyzer);

查询query = parser.parse(querystr);

这是我的展示:

TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
        searcher.search(query, collector);
        ScoreDoc[] hits = collector.topDocs().scoreDocs;
        // 4. display results
        System.out.println("Found " + hits.length + " hits.");

        for(int i=0;i<hits.length;++i) {
            int docId = hits[i].doc;
            Document d = searcher.doc(docId);
            System.out.println((i + 1) + ". " + d.get("pmid") + "\t" + d.get("title"));
        }

1 个答案:

答案 0 :(得分:0)

您的代码看起来不错,但是如果您打印docId值,则会有所帮助。

如果此值不同,那么您很可能会多次将文档添加到需要修复的索引中。

请记住,Lucene并没有内置的身份概念。对于Lucene而言,即使它们具有完全相同的术语,所有文档也是不同的。解决此问题的标准方法是让非分析字段包含一些外部ID(例如数据库ID),并在发生更改时删除+重新添加更新文档。