使用Lucene 7.4.0打印索引词

时间:2018-08-13 06:17:19

标签: java lucene

此刻,我试图从使用Lucene 7.4.0生成的索引IO打印字段和术语,此刻,我具有以下内容:

public static void main(String[] args) throws IOException {

    String indexDir = "C:/directory/to/index";
    index = FSDirectory.open(Paths.get(indexDir));

    IndexReader reader = DirectoryReader.open(index);

    Fields fields = MultiFields.getFields(reader);

    for (String field : fields) {
        System.out.println(field);
        Terms terms = fields.terms(field);
        TermsEnum termsEnum = terms.iterator();

        //Term term = new Term(field);
        int count = 0;
        while (termsEnum.next() != null) {
            System.out.println(termsEnum.term().utf8ToString());
            count++;
        }
        System.out.println(count);
    }

目前,这给了我一长串按字母顺序排列的胡言乱语

3ñúä
3ñúæ
3ñúè
3ñúë
3ñúëµ
3ñúðéë
3ñúò
3ñúú
3ñû
3ñû5

我也尝试使用term.text(),但是尽管它可以打印正确的行数,但是每个条目都是空白。我觉得我已经接近了,但是缺少一些小东西

1 个答案:

答案 0 :(得分:1)

就像我以为我使这个问题复杂化了。

这些怪异的值是由于实际字段或多或少为“空”(看起来是空白但不是NULL)引起的。

作为对当前问题的回答,我试图以一种错误的方式尝试从Fields获取术语,而更简单的方法是改为加载文档并从那里请求我想要的字段

StringBuilder concat = new StringBuilder();

IndexReader reader = DirectoryReader.open(directory);

concat.append("Path , Parent \n" );
for( int i = 0; i <reader.maxDoc(); i++)  {
    Document doc = reader.document(i);

    String docPath = doc.get("path");
    String docParent = doc.get("Parent");

    concat.append(docPath + "," + docParent + "\n");

}

注意:我正在使用StringBuilder,因为我还将这些数据导出到.csv