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类的情况就基本上介绍完了。有什么不对或者不完善的地方欢迎指正。
http://my.oschina.net/MrMichael/blog/220681
相关推荐
01.Lucene4入门精通实战课程-概述 共23页02.Lucene系统架构 共16页03.Lucene索引里有什么 共17页04.Lucene索引深入 共24页05.Lucene索引深入优化 共10页06.Lucene索引搜索 共13页07.Lucene搜索实战1 共4页08.Lucene...
Lucene入门与使用,非常简单,适合入门
2. **文档(Document)**:在Lucene中,每份要被检索的数据被视为一个文档,可以包含多个字段(Field),每个字段都有特定的含义和用途,如标题、内容等。 3. **术语(Term)**:经过分析后的词汇单元,是构成索引...
**标题:“Lucene-入门”** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发并维护。它是Java编写的一个开源项目,被广泛应用于构建搜索引擎或者在大型数据集上进行全文检索。Lucene提供了丰富的搜索...
Document类用于存储文档数据,Field类用于定义文档字段,如标题、内容等,Term类表示索引中的词。 3. **查询解析**: 用户输入的查询字符串会被转换为Lucene查询语法,QueryParser类负责这个过程。它可以处理各种...
标题与描述:“Lucene简单入门程序实例”这一标题与描述明确指出文章将引导读者通过一个实际的示例来了解和掌握Lucene的基本操作。Lucene是一个高性能、全功能的文本搜索引擎库,它允许用户对文档进行索引和搜索。本...
2. **文档(Document)**:在 Lucene 中,每个文档都是一个包含多个字段(Field)的对象,如标题、内容等。每个字段有其特定的属性,如是否被索引、是否可搜索等。 3. **分析器(Analyzer)**:分析器负责将输入...
4. **IndexWriter**:这是创建和更新Lucene索引的主要类。你可以通过它添加、删除或修改文档,并控制索引的合并策略。 5. **QueryParser**:用于解析用户的查询字符串,并将其转化为 Lucene 可以理解的 Query 对象...
doc.add(new Field("title", "Lucene入门", Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("content", "这是Lucene 3.0的实例", Field.Store.YES, Field.Index.ANALYZED)); ``` 3. **查询...
**Lucene 2.4 入门指南** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了高级文本检索功能,广泛用于构建搜索引擎和其他需要高效全文检索能力的应用。本文将重点介绍 Lucene 2.4 版本的...
每个Document代表一个要索引的实体,字段通过Field类定义,比如添加一个TextField类型的字段表示文章内容。 3. 搜索:使用IndexReader打开索引,然后创建IndexSearcher。构造Query对象,执行search方法,返回匹配的...
在深入探讨Lucene Field之前,我们先来了解一下Lucene是什么。Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发,用Java编写。它提供了一个简单但功能强大的API,允许开发者在应用程序中添加搜索功能。...
01.Lucene4入门精通实战课程-概述 共23页02.Lucene系统架构 共16页03.Lucene索引里有什么 共17页04.Lucene索引深入 共24页05.Lucene索引深入优化 共10页06.Lucene索引搜索 共13页07.Lucene搜索实战1 共4页08.Lucene...
【Lucene 入门教程】 Lucene 是一个由Apache软件基金会开发的开源全文检索引擎工具包,它并非一个完整的搜索引擎,而是提供了一个强大的架构,允许开发人员轻松地在他们的应用程序中集成全文检索功能。Lucene 支持...
01.Lucene4入门精通实战课程-概述 共23页02.Lucene系统架构 共16页03.Lucene索引里有什么 共17页04.Lucene索引深入 共24页05.Lucene索引深入优化 共10页06.Lucene索引搜索 共13页07.Lucene搜索实战1 共4页08.Lucene...
**Lucene4 全文检索详解** Lucene4 是 Apache 软件基金会的一个开源全文检索库,它为开发者提供了强大的文本搜索功能。作为一个高级的搜索引擎工具包,Lucene4 提供了完整的索引和搜索机制,使得在文件和数据库中...
**Lucene学习入门程序** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它是Java编写,可以被集成到各种应用中,提供强大的文本检索功能。本程序是针对初学者设计的,旨在帮助开发者快速理解并...
**Lucene 2.4 入门例子** Lucene 是一个高性能、全文本搜索库,由Apache软件基金会开发。它提供了强大的搜索功能,被广泛应用于各种应用中的信息检索。在这个入门例子中,我们将探讨Lucene 2.4版本的一些关键特性和...
01.Lucene4入门精通实战课程-概述 共23页02.Lucene系统架构 共16页03.Lucene索引里有什么 共17页04.Lucene索引深入 共24页05.Lucene索引深入优化 共10页06.Lucene索引搜索 共13页07.Lucene搜索实战1 共4页08.Lucene...
01.Lucene4入门精通实战课程-概述 共23页02.Lucene系统架构 共16页03.Lucene索引里有什么 共17页04.Lucene索引深入 共24页05.Lucene索引深入优化 共10页06.Lucene索引搜索 共13页07.Lucene搜索实战1 共4页08.Lucene...