首页 »编程综合 » lucene2.4.1:Lucene(2.4.1)技术研究(4)--Field源代码 »正文
lucene2.4.1:Lucene(2.4.1)技术研究(4)--Field源代码
来源: 发布时间:星期三, 2009年4月1日 浏览:2次 评论:0
Field类(类似数据库中 字段和属性) 该类实现接口:Fieldable 继承静态类: AbstractField Fieldable接口 主要是描述 些基础信息 内容 设置权重以及获取权重 [void Boost(float boost), float getBoost;]
获取名称String name;
获取String类型值public String Value;
以Reader方式返回public Reader readerValue;
以 2进制或者TokenStream 方式返回public binaryValue;public TokenStream tokenStreamValue;
是否被存储boolean isStored;
是否被索引boolean isIndexed;
是否被分词boolean isTokenized;
是否是压缩存储 boolean isCompressed;
是否是 2进制boolean isBinary; ......其他 读者可以参考源代码 AbstractField抽象类定义 些常量: protected String name = "body"; //表示该Filed名称
protected boolean storeTermVector = false; //表示是否存储词条向量
protected boolean storeOffWithTermVector = false; //存储词条向量偏移量
protected boolean storePositionWithTermVector = false; //存储词条向量位置
protected boolean omitNorms = false; //
protected boolean isStored = false; //是否存储
protected boolean isIndexed = true; //是否是索引
protected boolean isTokenized = true; //是否是分词
protected boolean isBinary = false; //是否是 2进制数据
protected boolean isCompressed = false; //是否是压缩
protected boolean lazy = false; //是否是延迟
protected boolean omitTf = false; //
protected float boost = 1.0f; //设置激励因子
protected Object fieldsData = null; //Field内部属性具体内容
protected binaryLength; // 2进制数据长度
protected binaryOff; // 2进制数据偏移量
Filed类源代码解析 首先Filed内部定义了 3个静态类Store、Index、TermVector //定个静态类Store 主要为了设置Field存储属性
public final Store extends Parameter implements Serializable {
private Store(String name) {
super(name);
}
//使用压缩方式来存储Field值
public final Store COMPRESS = Store("COMPRESS");
//在索引中存储Field值
public final Store YES = Store("YES");
//在索引中不存贮Field值
public final Store NO = Store("NO");
}
//定个静态类Index 主要为了设置Field索引属性
public final Index extends Parameter implements Serializable {
private Index(String name) {
super(name);
}
//不对Field进行索引所以这个Field就不能被检索到(般来说建立索引而使它不被检索这是没有意义)
//如果对该Field还设置了Field.Store为Field.Store.YES或Field.Store.COMPRESS则可以检索
public final Index NO = Index("NO");
//对Field进行索引同时还要对其进行分词(由Analyzer来管理如何分词)
public final Index ANALYZED = Index("ANALYZED");
//废弃属性使用ANALYZED 来替代
public final Index TOKENIZED = ANALYZED;
//对Field进行索引但是不对该Field使用分词
public final Index NOT_ANALYZED = Index("NOT_ANALYZED");
//废弃属性使用NOT_ANALYZED来替代
public final Index UN_TOKENIZED = NOT_ANALYZED;
//即不对Field索引也不对其使用Analyzer来分词
public final Index NOT_ANALYZED_NO_NORMS = Index("NOT_ANALYZED_NO_NORMS");
//废弃属性有NOT_ANALYZED_NO_NORMS来替代
public final Index NO_NORMS = NOT_ANALYZED_NO_NORMS;
//对Field属性使用分词但是不是使用Analyzer来分词
public final Index ANALYZED_NO_NORMS = Index("ANALYZED_NO_NORMS");
}
这是 个和词条有关 类 在检索 时候需要指定检索关键字 通过为 个Field添加 个TermVector 就可以在检索中把该Field检索到 public final TermVector extends Parameter implements Serializable {
private TermVector(String name) {
super(name);
}
//不存储
public final TermVector NO = TermVector("NO");
//为每个Document都存储个TermVector
public final TermVector YES = TermVector("YES");
//存储并且存在位置信息
public final TermVector WITH_POSITIONS = TermVector("WITH_POSITIONS");
//存储并且存贮偏移量信息
public final TermVector WITH_OFFSETS = TermVector("WITH_OFFSETS");
//存储位置、偏移量等所有信息
public final TermVector WITH_POSITIONS_OFFSETS = TermVector("WITH_POSITIONS_OFFSETS");
} 构造 public Field(String name, String value, Store store, Index index)
public Field(String name, String value, Store store, Index index, TermVector termVector)
public Field(String name, Reader reader)
public Field(String name, Reader reader, TermVector termVector)
public Field(String name, TokenStream tokenStream)
public Field(String name, TokenStream tokenStream, TermVector termVector)
public Field(String name, value, Store store)
public Field(String name, value, off, length, Store store) 流程: 首先检查name以及values不能为空以及Nnull 然后检查是否是存储以及是否分词如果两者都是No 则抛出异常 然后检查是否存储以及是否向量分词 如果两者都是No' 则抛出异常 然后将该Filed 名称命令传递过来 名称源代码(this.name = name. ern) 表示获取JVM String常量池 地址 此时根据Store 值 来设置是否存储以及压缩 值 然后根据Index 值 来设置是否索引、是否分词、omitNorms 值以及置是否是 2进制 然后开始根据TermVector 值 来设置是否存储向量、是否存储偏移量、是否存储位置等信息 以上信息可能存在分析不正确 请大家给指证 本人英语有不如何好 系列文章: Lucene(2.4.1)技术研究(1)--lucene技术 Lucene(2.4.1)技术研究(2)--分析事例 Lucene(2.4.1)技术研究(4)--Field源代码
相关文章
读者评论
发表评论
|
|