Field 类也许是在文档索引期限间最重要的类了:该类在事实上控制着被索的域值。当创建好一个域时,你可以指定多个域外选项来控制Lucene在将文档添加进索引后针对该域的行为。
AbstractField
--->Field
--->FieldForMerge
--->LazyField
--->NumericField
从源代码中,可以看出Field 构造函数如下
org.apache.lucene.document.Field
Field(String, boolean, String, Store, Index, TermVector)
Field(String, byte[])
Field(String, byte[], int, int)
Field(String, byte[], int, int, Store)
Field(String, byte[], Store)
Field(String, Reader)
Field(String, Reader, TermVector)
Field(String, String, Store, Index)
Field(String, String, Store, Index, TermVector)
Field(String, TokenStream)
Field(String, TokenStream, TermVector)
三个内部类Field.Index,Field.Store,Field.termVector
org.apache.lucene.document.Field.Index
public static final Index NO;不建立索引
public static final Index ANALYZED;分词,建索引
public static final Index ANALYZED_NO_NORMS;分词,建索引(但是Field的值不像通常那样被保存,而是只取一个byte,这样节约存储 空间)
public static final Index NOT_ANALYZED;不分词,建索引
public static final Index NOT_ANALYZED_NO_NORMS;不分词,建索引(但是Field的值不像通常那样被保存,而是只取一个byte,这样节约存储 空间)
org.apache.lucene.document.Field.Store
public static final Store YES;保存
public static final Store NO;不保存
org.apache.lucene.document.Field.TermVector这个参数也不常用,它有五个选项。
Field.TermVector.NO表示不索引Token的位置属性;
Field.TermVector.YES则表示存储向量。
Field.TermVector.WITH_OFFSETS表示额外索引Token的结束点;
Field.TermVector.WITH_POSITIONS表示额外索引Token的当前位置;
Field.TermVector.WITH_POSITIONS_OFFSETS表示额外索引Token的当前和结束位置;
源码实例:
Field name=new Field("name","Leiwuluan",Store.YES,Index.NOT_ANALYZED);
Field name=new Field("age","23",Store.YES,Index.NOT_ANALYZED);