【问题标题】:Can one recover the content of an indexed Apache Lucene field可以恢复索引的 Apache Lucene 字段的内容吗
【发布时间】:2019-03-27 22:43:22
【问题描述】:

我在 Apache Lucene 中索引字符串实体。例如

doc.add(new StringField(fieldNameSecret, fieldValueSecret, Field.Store.NO));
doc.add(new StringField(fieldNameMeta, fieldValueMeta, Field.Store.YES));

我希望用户能够搜索fieldNameSecret 并返回fieldNameMeta。 由于fieldValueSecret 的内容是明智的,我的问题是:是否可以重建/恢复fieldValueSecret 的内容?

【问题讨论】:

  • 根据 niqueco 的回答,通常是肯定的,但有一些警告。在您的特定情况下,您使用的是 Stringfield,所以肯定是的。该字段的全部内容在没有分析的情况下被编入索引,因此您无需重建任何内容,只需阅读它们即可。

标签: lucene


【解决方案1】:

部分字段内容可以恢复,恢复多少取决于使用的索引选项。

  • 将存储各个术语,并公开它们在特定字段值中的存在。
  • 词干会破坏术语,因此如果词干删除了复数,那么重构的值将不会显示复数。同样,如果您应用LowerCaseFilter,则无法重建原始案例。
  • 如果您使用IndexOptions.DOCS_AND_FREQS 进行索引,那么有人将能够知道某个术语被提及了多少次。
  • 如果您使用IndexOptions.DOCS_AND_FREQS_AND_POSITIONS 进行索引,那么某人将能够重建术语的顺序(但是他将无法看到在分析过程中丢弃的东西,例如标点符号)。

添加:正如 femtoRgon 在 StringField 的特定情况下所提到的,您明确要求 Lucene 将整个字段值视为一个单独的项,无需其他处理。这将始终公开字段值,因为存储了术语(如我上面的第一点所述)。

【讨论】:

    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多