Lucene - 不需要索引的字符串字段

mik*_*ent 5 java lucene

(目前使用 Lucene 4.6)。

只是想知道为什么在org.apache.lucene.document.Document未编入索引的情况下存储文本信息似乎有些不受欢迎。 TextField被索引和标记。 StringField被索引但没有被标记。

但是假设您只需要一个String伴随您的org.apache.lucene.document.Documents 中的其他信息但它本身永远不会成为查询主题的?

只是(在 4.6 中)org.apache.lucene.document.Field.Index有一个“NO”,意思是“不要索引字段值。”,但这目前是“已弃用”。

为什么?有没有更好的方法让“惰性”String信息伴随您的索引(并且可能标记化)更重要的字段?

mik*_*ent 5

(差不多)两年后,我希望对事物有更好的理解。

答案似乎是使用StoredField.

事实上TextField, 和StringField被存储在索引中并从索引中检索StoredFieldStoredField是“不可知的”,就像TextField和 一样StringField:所有这些都是 的子类Field,除其他方法外,它还setStringValue具有setIntValuestringValuenumericValue!

Lucene 6 中没有IntField……但是有一个“红鲱鱼”叫做IntPoint. 这是一个转移注意力的话题,因为它永远不能存储在索引中!

事实上,如果您需要存储Integer您(我认为)需要使用StoredFieldor (如果需要索引)StringField

请参阅我最近的回答