繁体   English   中英

如何合并2个或更多的Lucene索引,并在最终索引中避免重复的值?

[英]How can I merge 2 or more lucene indexes and avoid duplicated values in my final index?

如何合并2个或更多的Lucene索引,并在最终索引中避免重复的值?

今天,我正在使用以下代码在索引之间进行合并:

        IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_36, new StandardAnalyzer(Version.LUCENE_36));
        IndexWriter writer = new IndexWriter(getFSDirectory(INDEX_DIR), iwc);
        LogMergePolicy logMerge = new LogMergePolicy() {

            @Override
            protected long size(SegmentInfo arg0) throws IOException {
                return 0;
            }
        };
        logMerge.setMergeFactor(1000);
        iwc.setRAMBufferSizeMB(50);

        Directory indexes[] = new Directory[INDEXES_DIR.size()];

        for (int i = 0; i < INDEXES_DIR.size(); i++) {
            Directory d = FSDirectory.open(new File(INDEXES_DIR.get(i)).getAbsoluteFile());

            System.out.println("Adding: " + INDEXES_DIR.get(i));
            indexes[i] = d;
        }

        System.out.print("Merging added indexes...");
        writer.addIndexes(indexes);
        System.out.println("done");

我不相信Lucene提供任何简单的方法来做到这一点,例如addIndexes

您可能需要:

再次遍历索引以删除重复项。 您可以使用termEnum获取每个文档中id字段的term()docFreq() ,以检测重复项。 然后,您可以从DocsEnum的调用中,从TermsEnum.docs

或者,也许更明智的方法是使用IndexWriter.updateDocument自己执行合并,以防止重复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM