【问题标题】:Lucene multiplevalue field - mixing TextField with StringFieldLucene 多值字段 - 将 TextField 与 StringField 混合
【发布时间】:2013-06-11 13:01:04
【问题描述】:

我使用一个多值字段查询我的索引。在索引期间,使用少量字段创建字段,其中一些是 TextField,一些是 StringField

我遇到的问题是,通过使用带有多个单词的查询来查询索引,我得到了: java.lang.IllegalStateException:字段“someField”没有位置数据被索引;无法运行 PhraseQuery (term=someTerm)

我改变了多值字段的创建方式,只使用了TextField,问题就消失了。

TextFieldStringField 似乎不应该混合在一个多值字段中。 我对吗?谁能给我一些解释为什么(或为什么不)?

【问题讨论】:

    标签: java lucene indexing


    【解决方案1】:

    StringField 被明确设置为仅存储文档 (IndexOptions.DOCS_ONLY),它忽略了存储的频率和位置。由于它实际上是一个关键字字段,并且多个单词将存储为单个标记,因此对其运行短语查询实际上没有任何意义。

    虽然可以将不同的字段类型混合到同一个字段中,但这似乎会给我带来混乱和不可预测的结果。我建议对添加到特定字段的类型保持一致,如果您需要添加具有显着不同逻辑的值,例如 TextField 与 StringField 之间的差异,将它们放在不同的字段中可能会更好在索引中。

    如果这发生在某种包罗万象的便利字段中(例如 this SOLR example 中的 text 字段),那么将 TextField 用于任何事情可能是一个合理的想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 2015-05-11
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多