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)
走那条路,你可以预期索引会变得更大一些,但它使它更易于使用,并且性能应该得到提高。
我正在尝试将我的应用程序中的 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)
走那条路,你可以预期索引会变得更大一些,但它使它更易于使用,并且性能应该得到提高。