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



Lucene4 入门(2)–Field类及辅助类说明
二、Field类
1、  类的说明
在一般情况下为Document对象创建一个Field对象会使用它的子类,比如:
IntField,LongFieldFloatFieldDoubleFieldBinaryDocValuesFieldStringField, 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()方法。
内部类
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类的概述
跟StringField一样,TextField类也是一个Field类的子类,也是包含了多个FieldType对象,官方说明是:这个Field是一个索引分词,不包含term vectors,例如将被用到“body”属性,包含大量文本的Document中。
StoredField类
1、  类概述
同StringField类一样,官方说明是:一个字段的值被存储,所以可以通过
IndexSearcher.doc和IndexReader.document获得这个Field的值。
NumericDocValuesField类
1、 类概述
官方概述:这个Field用于每个Document添加一个long类型的值用于评分、排序或者索引值,例子如下:
document.add(new NumericDocValuesField(name, 22L));
如果你需要去存储这个值,你应该添加一个单独的StoredField实例。
从源码也可以看出它是不存储的。
十一、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
文档包含索引、位置、词频和偏移量。
Please read full article from Lucene4 入门(2)–Field类及辅助类说明

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts