Field简述
在Lucene中,各种Field都是IndexableField接口的实现,该接口中提供了一些通用的方法,用于获取Field相关的属性
|
|
NOTES:一般通过fieldType()方法获取到该Field对应的FieldType类型,但是却并不能去调用FieldType一系列的set方法,例如
|
|
否则会报
java.lang.IllegalStateException: this FieldType is already frozen and cannot be changed
这是因为各Field的子类中,都调用了type.freeze()方法,而该方法就可以阻止对fieldType做更改。
在Lucene 6.0中,IntField替换为IntPoint,FloatField替换为FloatPoint,LongField替换为LongPoint,DoubleField替换为DoublePoint。对Lucene常见Field总结如下
名称 | 说明 |
---|---|
IntPoint | 对int型字段索引,只索引不存储,提供了一些静态工厂方法用于创建一般的查询,提供了不同于文本的数值类型存储方式,使用KD-trees索引 |
FloatPoint | 对float型字段索引,其它同上 |
LongPoint | 对long型字段索引,其它同上 |
DoublePoint | 对double型字段索引,其它同上 |
BinaryDocValuesField | 只存储不共享,例如标题类字段,如果需要共享并排序,推荐使用SortedDocValuesField |
NumericDocValuesField | 存储long型字段,用于评分、排序和值检索,如果需要存储值,还需要添加一个单独的StoredField实例 |
SortedDocValuesField | 索引并存储,用于String类型的Field排序,需要在StringField后添加同名的SortedDocValuesField |
StringField | 只索引但不分词,所有的字符串会作为一个整体进行索引,例如通常用于country或id等 |
TextField | 索引并分词,不包括term vectors,例如通常用于一个body Field |
StoredField | 存储Field的值,可以用 IndexSearcher.doc和IndexReader.document来获取存储的Field和存储的值 |
IntPoint的使用
|
|
输出结果如下
|
|
FloatPoint,LongPoint,DoublePoint使用方法类似,不再赘述。
BinaryDocValuesField的使用
|
|
输出结果如下
|
|
StringField的使用
|
|
输出结果如下
|
|
TextField的使用
|
|
输出结果如下
|
|