【问题标题】:lucene index getDocCount() does not return the same value as total input document numberlucene index getDocCount() 不返回与输入文档总数相同的值
【发布时间】:2015-04-21 06:17:56
【问题描述】:

我有 120 万行要索引,每行在 lucene 索引编写器中作为文档读取。建立索引后,我尝试断言已编入索引的记录总数。这个数字小于1.2M。

添加文件的详细信息如下:

    Directory fsDir = FSDirectory.open(this.indexLoc, NoLockFactory.INSTANCE);
    IndexWriterConfig iwConf = new IndexWriterConfig(analyzer);
    iwConf.setOpenMode(mode);
    IndexWriter indexWriter = new IndexWriter(fsDir, iwConf);
    int count=0;
    FileInputStream input;
    input = new FileInputStream(new File(String.valueOf(dir)));
    CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder();
    decoder.onMalformedInput(CodingErrorAction.IGNORE);
    InputStreamReader isr = new InputStreamReader(input,decoder);
    BufferedReader reader = new BufferedReader(isr);
    StringBuilder content = new StringBuilder();
    String line;

    while ((line = reader.readLine()) != null) {
        Document d = new Document();
        d.add(new TextField(this.fieldName, line, Store.NO));
        indexWriter.addDocument(d);
        count++;
    }

    indexWriter.commit();
    indexWriter.close();
    reader.close();
    isr.close();
    input.close();
}

我获取索引文档编号的方式如下:

IndexReader reader = DirectoryReader.open(FSDirectory.open(this.indexLoc));
int docNum = reader.getDocCount(this.fieldName);

我追踪到 1.2M 已添加到文档 d。但是,为什么变量 docNum 的值小于 1.2M?

当我用小尺寸文档进行测试时,比如 1k,这两个数字是一致的。

ps,我使用的是 lucene 5.0。

【问题讨论】:

    标签: java lucene


    【解决方案1】:

    IndexReader.getDocCount(String field) 将返回该字段至少有一个词的文档数。所以如果line为空,文档数不会增加addDocument

    【讨论】:

    • 感谢您的回复。我添加了一条语句来检查 line 是否为空,它返回 false。由于它包含了一个带有停用词的分析器,是否有可能在分析器之后将该行转换为空词,以便不增加文档计数? @locoyou
    • @HappyCoding 是的,你是对的。如果您使用分析器,d 可能为空。
    猜你喜欢
    • 2020-10-18
    • 2015-04-17
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多