可以使用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-這可能值得考慮而是包含您想要搜索的所有內容的所有字段。這是一個常見且相當有用的模式(例如,Elasticsearch默認會這樣做,它們的默認設置爲_all field)
通過該路徑,您可以預期索引變得稍大一點,但它使它更易於使用,並且性能應該提高。