Lucene multiplevalue字段 - 将TextField与StringField混合

时间:2013-06-11 13:01:04

标签: java lucene indexing

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

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

我更改了创建多值字段的方式,只使用了 TextField ,问题就不存在了。

似乎 TextField StringField 不应混合在一个多值字段中。 我对吗?有人可以给我一些解释为什么(或为什么不)?

1 个答案:

答案 0 :(得分:4)

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

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

如果这种情况发生在某种包罗万象的方便领域(如this SOLR example中的text字段),那么使用TextField进行任何操作都可能是一个合理的想法。