Lucene IndexReader 升级

Lucene IndexReader upgrade

我正在尝试将我的应用程序中的 Lucene 从版本 3.5.0 升级到 5.0.0。该应用程序具有此代码:

IndexReader indexReader=IndexReader.open(index);
String[] fields = indexReader.getFieldNames(FieldOption.ALL).toArray(new String[0]);

我需要 fieldNames,所以我在 MultiFieldQueryParser 中使用它们。我如何更改版本 5.0.0?

可以使用LeafReader.getFieldInfos()方法从reader获取字段信息,反过来,可以从FieldInfo.name:

获取字段名
public static String[] getFieldNames(IndexReader reader) {
    List<String> fieldNames = new ArrayList<String>();
    //For a simple reader over only one index, reader.leaves() should only  return one LeafReaderContext
    for (LeafReaderContext readerCtx : reader.leaves()) {
        FieldInfos fields = readerCtx.reader().getFieldInfos();
        for (FieldInfo field : fields) {
            //Check whether the field is indexed and searchable, perhaps?
            fieldNames.add(field.name);
        }
    }
    return fieldNames.toArray(new String[fieldNames.size()]); 
}

注意:可能值得考虑使用包含您要搜索的所有内容的包罗万象的字段。这是一种常见且非常有用的模式(例如,Elasticsearch 默认使用 _all field

走那条路,你可以预期索引会变得更大一些,但它使它更易于使用,并且性能应该得到提高。