Field是Document的一部分,每个字段有三部分:名字,类型和值。字段的值可以是text(String,Reader或预先分词的TokenStream),binary(byte[]) 或者数字(Number)。字段类型由接口IndexableFieldType限制,FieldType类实现了此接口,建议当Field实例化后不要修改。
IndexableField接口定义了Field字段的基本信息,如字段名,字段类型,分词相关等。
public interface IndexableField {
//字段名
public String name();
//字段类型
public IndexableFieldType fieldType();
//分词
public TokenStream tokenStream(Analyzer analyzer, TokenStream reuse);
//......
}
Field类实现了IndexableField接口,作为所有Lucene Field的父类。定义了字段名,字段值和字段类型以及多种字段的构造方法。
public class Field implements IndexableField {
//字段类型
protected final IndexableFieldType type;
//字段名
protected final String name;
//字段值
protected Object fieldsData;
//分词
protected TokenStream tokenStream;
//构造方法
protected Field(String name, IndexableFieldType type) {}
public Field(String name, BytesRef bytes, IndexableFieldType type) {}
//......
}
Field核心属性:
是否分词(tokenized):id等不需要分词,句子短语等需要拆分为词查询的需要分词。
是否索引(indexed):将整个字段值或者分词后的词进行索引,用于查询。不需要检索查询的字段可以设置为否。
是否存储(stored):用于查询返回结果进行展示。
-
TextField
分词,索引,存储可选。 -
StringField
不分词,索引,存储可选。 -
IntPoint,LongPoint,FloatPoint,DoublePoint
分词,索引,不存储(如需存储,添加独立的StoredField)。 -
StoredField
不分词,不索引,存储。
网友评论