Lucene - 读取存储的所有字段名称

Kal*_*yan 6 lucene indexing web-crawler

我需要用 lucene 索引中的所有字段名称填充下拉列表,并需要显示这些值。我能够成功地使用

var luceneIndexReader IndexReader.Open("D:\path_to\index_directory", true);
var allAvailableFieldNames = luceneIndexReader.GetFieldNames(IndexReader.FieldOption.ALL);
Run Code Online (Sandbox Code Playgroud)

唯一的问题是我只需要在下拉列表中包含“已存储”字段。此列表包括其中的所有“已索引”和/或“已存储”字段。如果一个字段有任何“存储”值,有没有办法查询/搜索索引,从而过滤掉这个列表?

fat*_*tih 5

问题是索引中的每个文档都可以有包含存储字段的不同字段。由于这些不是作为倒排索引的 storef(它们存储在每个文档中),因此您无法从 IndexReader 中检索它们。您需要检索一个特定的文档,例如Document doc = indexReader.document(1);并调用Fieldable fields[] = doc.getFields();。然后在它们之间迭代和检查:field.isStored();