lucene(2)—lucene的各种Field及其排序
Lucene的Field说明
Lucene存储对象是以document为存储单元,对象中相关的属性值则存放到Field中;
lucene中所有Field都是IndexableField接口的实现
|
|
IndexableField接口提供了一些方法,主要是对field相关属性的获取,包括
|
|
|
|
|
|
|
|
|
|
所有的Field均是org.apache.lucene.document.Field的子类;
项目中我们常用的Field类型主要有IntField, LongField, FloatField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField.
lucene常见Field
IntField 主要对int类型的字段进行存储,需要注意的是如果需要对InfField进行排序使用SortField.Type.INT来比较,如果进范围查询或过滤,需要采用NumericRangeQuery.newIntRange() LongField 主要处理Long类型的字段的存储,排序使用SortField.Type.Long,如果进行范围查询或过滤利用NumericRangeQuery.newLongRange(),LongField常用来进行时间戳的排序,保存System.currentTimeMillions() FloatField 对Float类型的字段进行存储,排序采用SortField.Type.Float,范围查询采用NumericRangeQuery.newFloatRange() BinaryDocVluesField 只存储不共享值,如果需要共享值可以用SortedDocValuesField NumericDocValuesField 用于数值类型的Field的排序(预排序),需要在要排序的field后添加一个同名的NumericDocValuesField SortedDocValuesField 用于String类型的Field的排序,需要在StringField后添加同名的SortedDocValuesField StringField 用户String类型的字段的存储,StringField是只索引不分词 TextField 对String类型的字段进行存储,TextField和StringField的不同是TextField既索引又分词 StoredField 存储Field的值,可以用IndexSearcher.doc和IndexReader.document来获取此Field和存储的值
IntField使用
|
|
测试排序结果如下
|
|
如果修改NumericDocValuesField对应的值,结果会随着其值的大小而改变
LongField使用
|
|
运行结果如下:
|
|
FloatField使用
|
|
结果如下:
|
|
BinaryDocValuesField使用
|
|
运行结果:
|
|
为什么这样呢,这是跟BinaryDocValuesField的特性决定的,只索引不存值!
StringField使用
|
|
运行结果如下:
|
|
TextField使用
|
|
运行结果如下:
|
|