此刻,我试图从使用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(),但是尽管它可以打印正确的行数,但是每个条目都是空白。我觉得我已经接近了,但是缺少一些小东西
答案 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