Lucene IndexReader升级

时间:2016-02-01 18:05:41

标签: java lucene 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?

1 个答案:

答案 0 :(得分:2)

您可以使用LeafReader.getFieldInfos()方法从阅读器获取字段信息,反过来,您可以从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()]); 
}

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

走这条路线,您可以期望索引变得更大,但它使用起来更简单,并且应该提高性能。