(目前正在使用Lucene 4.6)。
只是想知道为什么在org.apache.lucene.document.Document
中存储未编入索引的文本信息是不合适的。 TextField
被编入索引并进行标记化。 <{1}}已编入索引但未标记化。
但是假设您只需要StringField
附带String
中其他信息的org.apache.lucene.document.Document
,但它本身永远不会成为查询的主题吗?
只是(在4.6中)org.apache.lucene.document.Field.Index
有一个“NO”,意思是“不要索引字段值。”,但这是目前“已弃用”。
为什么呢?有没有更好的方法让索引(可能是标记化的)更重要的字段附带“惰性”String
信息?
答案 0 :(得分:1)
您可以将以下constructor用于您的字段
Field(java.lang.String, java.lang.String, org.apache.lucene.document.FieldType)
FieldType有property
public void setIndexed(boolean value)
或者您可以创建自定义字段,在该字段中,您需要覆盖字段类型的默认构造函数:
public final class StringNoIndexedField extends Field {
public static final FieldType TYPE_NOT_INDEXED = new FieldType();
static {
TYPE_NOT_INDEXED.setIndexed(false);
TYPE_NOT_INDEXED.setStored(true);
TYPE_NOT_INDEXED.setTokenized(false);
TYPE_NOT_INDEXED.freeze();
}
public StringNoIndexedField(String name, String value) {
super(name, value, TYPE_NOT_INDEXED);
}
}
答案 1 :(得分:1)
(差不多)2年后,我希望对事情有一点了解。
答案似乎是使用final Tooltip tooltip = new Tooltip();
tooltip.setStyle("-fx-background-color: yellow");
tooltip.setText("Message");
。
事实上,StoredField
和TextField
存储在索引中并从StringField
中检索。与StoredField
和StoredField
一样,TextField
是&#34;不可知的&#34;所有这些都是StringField
的子类,其中包括Field
setStringValue
}},setIntValue
,stringValue
和numericValue
!
Lucene 6没有IntField
...但是有一个&#34;红鲱鱼&#34;叫IntPoint
。它是一个红鲱鱼,因为它无法存储在索引中......永远!
事实上,如果您需要存储Integer
,我(我认为)需要使用StoredField
或(如果需要编入索引)StringField
。