2019独角兽企业重金招聘Python工程师标准>>>

Lucene4 入门(2)–Field类及辅助类说明

一、Eclipse中Field类的继承关系图:

二、Field类

1、  类的说明

在一般情况下为Document对象创建一个Field对象会使用它的子类,比如:

IntField,LongField, FloatField, DoubleField, BinaryDocValuesField, StringField, TextField

, NumericDocValuesField, SortedDocValuesField, StoredField。而不是使用它自己。

一个Field是Document的一部分,每一个Field有三部分组成,分别是:名 称、类型和值。值可以是文本(String类型,Reader类型或者是预分享的TokenStream),二进制(byet[]),或者是数字(一个 Number类型)Field是可以存储在索引中的,以便日后返回这个文档。

需要注意的是:这个Field 是一个实现了IndexableFieldType接口的类,

修改IndexableFieldType的状态将影响字段的使用。强烈建议不要在实例化

Field对象后修改它。可以通过在创建Field的配置类FieldType时调用FieldType的

方法freeze().该方法的解释是:阻止未来改变,推荐在创建FieldType对象时调用,去预防无意的状态改变。

在Field子类中设置FieldType时都调用了freeze()方法,代码如下:

TYPE_NOT_STORED.setIndexed(true);

TYPE_NOT_STORED.setOmitNorms(true);

TYPE_NOT_STORED.setIndexOptions(IndexOptions.DOCS_ONLY);

TYPE_NOT_STORED.setTokenized(false);

TYPE_NOT_STORED.freeze();

上面是StringField中的一段代码,代码的最后调用了freeze()方法。

2、  构造函数

  • public Field(String name, Reader reader, FieldType type)

  • public Field(String name, TokenStream tokenStream,

  • FieldType type)

  • public Field(String name, byte[] value, FieldType type)

  • public Field(String name, byte[] value, int offset, int

  • length, FieldType type)

  • public Field(String name, BytesRef bytes, FieldType type)

  • public Field(String name, String value, FieldType type)

其中传byte[]参数的构造函数需要主要的是:byte[]参数使用不是复制(也就是使用的是对象引用),所以在Field完成前,不要修改它。

Field还有一些构造函数,在4.4版本中是不赞成使用的。

在上面所列的Field构造函数的最后一个参数都是FieldType类型,这个是Field重要的辅助类,稍后会记录。

3、  内部类

Field类里面还包含三个枚举类型的内部类,分别是:Store、Index和

TermVector,其中Index和TermVector在4.4版本中也是不赞成使用的,那我们就光看Store吧,它包含两个枚举值,YES和NO,就是表示Field是否存储时使用。

三、StringField类

1、  类的概述:

StringField是Field类的一个子类,其实就是在原有Field类的基础上 添加了FieldType字段,官方说明是:一个索引但不分词的Field,通过构造传过来的String值会是一个单独的Token,也就是会把这个字 符串当成一个完整的词来进行索引,官方还举了一些例子,如:一个地名或ID还有path(路径)都不需要分词。你打算使用排序或访问通过字段缓存。

2、  StringField类的源码

通过看这个类的源码你会一目了然

StringField定义了两个FieldType对象

一个为索引存储但不分词。另一个是索引不存储不分词,

这两个都是通过一个静态代码块儿来完成初始化的,通过看这个FieldType对象的设置,我们以后要定义FieldType时就可以参考这个了。

最后一个构造函数来调用父类的构造函数。

四、TextField类

1、  类的概述

跟StringField一样,TextField类也是一个Field类的子类,也是包含了多个FieldType对象,官方说明是:这个Field是一个索引分词,不包含term vectors,例如将被用到“body”属性,包含大量文本的Document中。

TextField类的源码

五、StoredField类

1、  类概述

同StringField类一样,官方说明是:一个字段的值被存储,所以可以通过

IndexSearcher.doc和IndexReader.document获得这个Field的值。

2、类源码:

构造函数基本与父类一致。

六、IntField类

1、  类概述

官方说明:int类型的Field在一个有效的范围内过滤和排序,下面是一个例子:

document.add(new IntField(name, 6, Field.Store.NO));

为了获得最佳性能,使用一个IntField和Document实例来保存多个文档,例子如下:

2、源码

七、LongField类

1、  类概述

基本与IntField一样,例子也一样,就是把IntField改成LongField。

2、  源码

源码结构也一样。

八、DoubleField类

1、  类概述

与IntField和Long一样。

2、  源码

源码结构也一样。

九、FloatField类

同以上三种一样。

十、NumericDocValuesField类

1、 类概述

官方概述:这个Field用于每个Document添加一个long类型的值用于评分、排序或者索引值,例子如下:

document.add(new NumericDocValuesField(name, 22L));

如果你需要去存储这个值,你应该添加一个单独的StoredField实例。

2、  源码

从源码也可以看出它是不存储的。

十一、FieldType类

1、  类的概述

该类主要是配置Field类来使用的,例如:是否储存,是否索引,是否分词等。

还有一个重要的方法freeze(),用来阻止Field在实例化后完成前修改。

2、  内部类

FieldType类包含一个内部的枚举类型NumericType来表示数字类型,值分别是,INT,LONG,FlOAT,DOUBLE。

3、  FieldType还用到了一个IndexOptions枚举类型,他有四个值,分别是:

DOCS_ONLY

文档只包含索引,位置和词频将忽略,查询短语和位置信息将引起异常

DOCS_AND_FREQS

文档只包含索引和词频,位置将忽略,这个可以正常评分,查询短语和位置也将引发异常

DOCS_AND_FREQS_AND_POSITIONS

文档包含索引位置和词频,这是一个典型的默认为全文搜索:全部启用评分和位置查询的支持。

DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS

文档包含索引、位置、词频和偏移量。

至此Field类的情况就基本上介绍完了。有什么不对或者不完善的地方欢迎指正。

转载于:https://my.oschina.net/MrMichael/blog/220681

Lucene4 入门(2)–Field类及辅助类说明相关推荐

  1. lucene学习5----Field类及辅助类说明

    2019独角兽企业重金招聘Python工程师标准>>> 一.Eclipse中Field类的继承关系图: 二.Field类 1.  类的说明 在一般情况下为Document对象创建一个 ...

  2. method java_解析Java中的Field类和Method类

    Field类Field类中定义了一些方法,可以用来查询字段的类型以及设置或读取字段的值.将这些方法与继承而来的member方法结合在一起.就可以使我们能够找出有关字段声明的全部信息,并且能够操纵某个特 ...

  3. TypeScript入门教程 之 类/抽象类/构造器/Getter/Setter

    TypeScript入门教程 之 类/抽象类/构造器/Getter/Setter 将JavaScript中的类作为头等项很重要的原因是: 类提供了有用的结构抽象 为开发人员提供一种一致的方式来使用类, ...

  4. java method field_java_解析Java中的Field类和Method类,Field类 Field类中定义了一些方 - phpStudy...

    解析Java中的Field类和Method类 Field类Field类中定义了一些方法,可以用来查询字段的类型以及设置或读取字段的值.将这些方法与继承而来的member方法结合在一起.就可以使我们能够 ...

  5. Java反射使用的Field类介绍

    一.Field类的作用 Field是一个类,位于java.lang.reflect包下.在Java反射中Field类描述的是类的属性信息,功能包括 (1)获取当前对象的成员变量的类型 (2)对成员变量 ...

  6. Field类的概述和使用

    在获取一个类的属性时由两种方式: 1.得到实现的接口或父类中的公共属性:public Field[] getFields() 2.得到本类中的全部属性:public Field[] getDeclar ...

  7. mysql源代码解析经典类——Field类

    Field类用于描述表中的列或属性.Field是对列数据类型以及属性的定义.Field类是一个抽象类.Field类有许多的具体子类.几乎每种类型的列都有相对应的Field子类. sql下的Field. ...

  8. java field类,Java反射—Field类使用

    Field作为反射中对应类或对象中的域或者叫做属性的操作类,除了我前一篇文章中的得到名字和类型等,Field的作用不限于此. Java SE 8的Docs这样说:A Field provides in ...

  9. java Field类

    原文地址:http://www.cnblogs.com/xinhuaxuan/p/6019510.html 一.Field类是什么 Field是一个类,位于java.lang.reflect包下. 在 ...

最新文章

  1. python在print()中使用format的时候前面一定要有花括号{},否则值打印不上去
  2. 系列文章|OKR与敏捷(二):实现全栈敏捷 1
  3. ajaxFileUpload plugin上传文件 chrome、Firefox中出现SyntaxError:unexpected token
  4. Lucene默认的打分算法——ES默认
  5. 开启大数据时代谷歌三篇论文-BigTable
  6. 贝叶斯优化的初步理解
  7. 如何使用ping命令检查网络故障
  8. java 与c des_Java和C/C++进行DES/AES密文传输
  9. 一图说清:做数据分析,到底要懂多少业务知识?
  10. 编程序常用英语单词是什么
  11. [笔记]深入解析Windows操作系统《二》系统架构
  12. python在linux下打包程序_Python打包程序
  13. Windows问题记录之任务栏图标透明
  14. 广西南宁机器人比赛_缤纷校园|2018年广西中小学电脑机器人竞赛开赛 南宁学子大显身手...
  15. 交中IB课程中心2022届早申阶段录取成果汇总
  16. linux C++ 获取当前时间,以标准时间“年-月-日 时:分:秒”的形式输出
  17. 【谈薪】校招社招如何谈薪
  18. MAC版本 12.2下 Lightroom2021版本闪退解决办法
  19. js将多文件打包成zip下载
  20. C#操作xml文档,cuid,dategridview显示数据

热门文章

  1. matlab ros 手势识别,使用MATLAB读取分析ros记录的.bag文件
  2. php ajax替换数据,如何用ajax替换php函数
  3. mysql练习题及答案_MySQL经典练习题及答案,常用SQL语句练习50题
  4. uniapp中qrcode生成二维码后传的参数不见了_阿虚教你制作动态二维码,超详细教程!
  5. 安装JDK1.8+环境配置
  6. 在线考试系统html模板,请问谁有在线考试系统的网页模板?
  7. c语言实验至少包括四个函数中,C语言实验报告《函数》
  8. 框架模式与设计模式之区别
  9. 小程序输入框导致界面上移,在输入的时候固定住页面的解决代码
  10. 即时通讯下数据粘包、断包处理实例(基于CocoaAsyncSocket)