2

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

我遇到的问题是,通过使用查询来查询索引,我得到了一个以上的单词: java.lang.IllegalStateException: field "someField" was indexed without position data; 无法运行 PhraseQuery (term=someTerm)

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

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

4

1 回答 1

4

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

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

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

于 2013-06-11T15:41:22.903 回答