我使用一个多值字段查询我的索引。在索引字段期间,使用几个字段创建字段,其中一些字段是TextField,有些是StringField。
我遇到的问题是,通过使用查询查询索引,我得到了更多的单词: java.lang.IllegalStateException: someField字段是在没有位置数据的情况下索引的;不能运行PhraseQuery (term=someTerm)
我改变了创建多值字段的方式,只使用了TextField,并且发现了问题。
似乎TextField和StringField不应该混合在一个多值字段中。我说的对吗?有人能给我解释一下为什么(或者为什么不)吗?
发布于 2013-06-11 15:41:22
StringField显式地设置为只存储文档(仅限),该文档省略了存储的频率和位置。因为它实际上是一个关键字字段,并且多个单词将被存储为一个单一的标记,所以对它运行短语查询是没有意义的。
虽然可以将不同的字段类型混合到同一个字段中,但这似乎会给我带来混乱和不可预测的结果。我建议在添加到特定字段的类型上保持一致,如果您需要使用管理它们的明显不同的逻辑添加值,比如TextField与StringField之间的差异,那么最好将它们放在索引中的不同字段中。
如果这种情况发生在某种“通吃”、“方便”字段(如来自这个SOLR示例的这个SOLR示例字段)中,那么对任何事情都使用TextField可能是一个合理的想法。
https://stackoverflow.com/questions/17044778
复制相似问题