文档章节

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

明舞
 明舞
发布于 2014/11/15 22:58
字数 1446
阅读 67
收藏 0
点赞 0
评论 0

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

二、Field类

1、  类的说明

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

IntField,LongFieldFloatFieldDoubleFieldBinaryDocValuesField,StringField, TextField

, NumericDocValuesField, SortedDocValuesFieldStoredField。而不是使用它自己。

一个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类的情况就基本上介绍完了。有什么不对或者不完善的地方欢迎指正。


© 著作权归作者所有

共有 人打赏支持
明舞
粉丝 227
博文 424
码字总数 516555
作品 0
程序员
Lucene-5.2.1学习:入门

1、Lucene的核心jar包 lucene-core-5.2.1.jar lucene-analyzers-common-5.2.1.jar lucene-queryparser-5.2.1.jar 2、主要开发包说明 org.apache.lucene.analysis:语言分析器,主要用于分词 ......

Harmel
2015/08/11
9.2K
3
Lucene4.7 索引和检索的常用API(二)

前面几篇笔者已经把Lucene的最基本的入门,介绍完了,本篇就对Lucene基本的知识做一个总结,以便于加深对Lucene基本API组件的理解。 为了方便对比学习,下面给出表格数据 索引期间使用的API...

一枚Sir
2014/04/10
0
0
Lucene 3.5和Solr 3.5:大幅降低内存用量、SearcherManager和深度分页支持

Lucene项目管理委员会宣布Apache Lucene 3.5.0和Apache Solr 3.5.0已经可以使用。Lucene是一个高性能、支持全文搜索的文本搜索开发库。Solr是一个独立的搜索服务器,其核心使用了Lucene来做索...

墙头草
2012/02/03
3.4K
7
lucene基础(1)

lucene使用步骤分为两步,一是建立索引,二是搜索索引文档; 一、建立索引 先了解必须的五个基础类; 1、Document:由过个Field组成。相当于数据库的一条记录,Field对象相当于记录的字段; ...

110hxl
2016/10/11
9
1
Lucene In Action 读书笔记(一)

简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和...

林俊龙
2013/09/04
0
1
lucene学习笔记一之初识lucene

承接第一篇的博文所述,建一个lucene的小例子: 开发环境:本人用的IDE是myeclipse10,jdk1.7(开发环境不是硬性要求,只要能运行程序就行) 1.首先我们新建java项目luce_01,在项目目录上点击新建文...

程开华
2014/01/08
0
0
lucene 6.0 常用类与方法

1.目录 org.apache.lucene.store.Directory 指定索引所在目录。 org.apache.lucene.store.RAMDirectory 存放于内存中的目录。 org.apache.lucene.store.RAMDirectory.RAMDirectory(FSDirect......

OSC一霸
2016/07/12
207
0
在Lucene.net实现自定义排序

在Lucene.net实现自定义排序,需要实现两个Lucene.Net.Search的两个接口: public interface SortComparatorSource { ScoreDocComparator NewComparator(IndexReader reader , System.Strin......

长平狐
2013/06/17
440
0
全文搜索 lucene使用与优化

1 lucene简介 1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。 1.2 ...

山哥
2011/09/21
0
0
Apache Lucene与Lucene.Net——全文检索服务器

lucene学习教程 1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。 2 ...

长平狐
2013/01/06
831
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Dubbo 源码解读 —— 可支持序列化及自定义扩展

一、概述 从源码中,我们可以看出来。目前,Dubbo 内部提供了 5 种序列化的方式,分别为 fastjson、Hessian2、Kryo、fst 及 Java原生支持的方式 。 针对不同的序列化方式,对比内容如下: 名...

Ryan-瑞恩
5分钟前
0
0
MySQL内存设置—— MySQL server has gone away

set global max_allowed_packet=268435456

一梦心草
14分钟前
0
0
推导式

列表、集合和字典推导式 列表推导式是Python最受喜爱的特性之一。它允许用户方便的从一个集合过滤元素,形成列表,在传递参数的过程中还可以修改元素。形式如下: [expr for val in collect...

火力全開
19分钟前
0
0
maven配置文件settings.xml详解

settings.xml有什么用? 如果在Eclipse中使用过Maven插件,想必会有这个经验:配置settings.xml文件的路径。 settings.xml文件是干什么的,为什么要配置它呢? 从settings.xml的文件名就可以...

浮躁的码农
24分钟前
0
0
MakeCode图形化编程语言学习笔记:micro:bit编程练习题[图]

MakeCode图形化编程语言学习笔记:micro:bit编程练习题[图]: 基础训练题: Q1:摇晃micro:bit编程板,随机出现7个小动物图标中的一个,并且前后相邻两次出现的小动物不重复。 注:七个小动物...

原创小博客
24分钟前
0
0
Redis 压力测试说明

Redis 压力测试说明 redis压力测试 2014-03-24 21:41:07| 分类: 默认分类 | 标签:redis |举报|字号 订阅 这几天对比测试mongodb、redis、pg的性能,主要是在消息队列、消息处理、用户经纬度...

舒文joven
25分钟前
0
0
拉姆达表达式 追加 条件判断 Expression>

public static class PredicateBuilder {   /// <summary>   /// 机关函数应用True时:单个AND有效,多个AND有效;单个OR无效,多个OR无效;混应时写在AND后的OR有效   /// </summary...

Lytf
37分钟前
0
0
【HAVENT原创】Spring Boot + Kafka 消息日志开发

最近因为部门需要将服务程序的各种日志发送给 Kafka 进行分析,所以写一个 Kafka 消息日志操作类,主要用来保存日志到 Kafka 以便查询。 一、pom.xml 增加配置 <!-- HH: 引入 kafka 模块 ...

HAVENT
38分钟前
0
0
7、Git命令解析

1、创建版本库 cd E:mkdir myRepositorypwdls -ah======git init 2、添加文件到仓库 添加git add readme.txt提交git commit -m "i wrote a readme file"【为什么Git添加...

丑陋的皮囊
38分钟前
0
0
ImageMagick批量压缩图片

#!/bin/shfor img in `find ./image -name "*.jpg"`; donewimg=`basename $img` convert -quality 75% $img ./ok/$newimg echo ./ok/$newimgdone...

dworry
38分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部