【问题标题】:Lucene - Reading all field names that are storedLucene - 读取存储的所有字段名称
【发布时间】:2014-01-25 15:46:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: lucene indexing web-crawler


    【解决方案1】:

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

    【讨论】:

    • 我想知道是否可以使用某种搜索表达式来搜索“存储”值,以查找字段是否有任何存储值。这将有助于将下拉列表仅限于存储的值。
    • 您能否更准确一点:您是要搜索具有存储值的文档还是要搜索具有存储值的字段?
    • 我会说'想要搜索具有存储值的字段'。
    • 不幸的是,没有直接的选择。我认为您有编写索引的代码。所以它是硬编码的,或者以某种方式在运行时决定存储哪个字段。你需要从那个地方获取信息。当所有文档都以相同的方式索引时,您可以检索索引中的第一个文档并检索存储的文档,就像我在回答中解释的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2012-10-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    相关资源
    最近更新 更多