Lucene 8中MultiFields.getFields方法的等价实现及报错解决方案
问题根因
Lucene 8.x 版本已正式移除 MultiFields.getFields(IndexReader) 方法,该API在7.x版本阶段就被标记为废弃,8.0及以上版本的org.apache.lucene.index.MultiFields类中不再提供该方法,因此编译时报找不到符号的错误。
修复方案
直接调用IndexReader自带的fields()方法即可,该方法返回的是聚合所有索引段后的全局字段视图,和原MultiFields.getFields()的返回结果逻辑完全一致,不需要额外适配。
修改后的可运行代码如下:
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index))); try { // 替换原MultiFields.getFields(reader)写法 Fields fields = reader.fields(); for (String termfield : fields) { Terms terms = fields.terms(termfield); TermsEnum termsEnum = terms.iterator(null); int count = 0; while (termsEnum.next() != null) { count++; } System.out.println(count); } } finally { // 补充关闭IndexReader逻辑,避免资源泄漏 reader.close(); }
内容的提问来源于stack exchange,提问作者Kiera.K
相关产品推荐
相关产品推荐

