现在的位置: 首页 > 综合 > 正文

Lucene:Field设置

2012年09月08日 ⁄ 综合 ⁄ 共 1912字 ⁄ 字号 评论关闭

Lucene系列介绍

Field类定义了两个很有用的内部静态类:Store和Index,用它们来设置对Field进行索引时的一些属性。

Store是一个内部类,它是static的,主要为了设置Field的存储属性

 1 public static final class Store extends Parameter implements Serializable {
 2     private Store(String name) {
 3        super(name);
 4     }
 5 
 6     // 在索引中压缩存储Field的值
 7    public static final Store COMPRESS = new Store("COMPRESS");
 8 
 9     // 在索引中存储Field的值
10    public static final Store YES = new Store("YES");
11 
12     // 在索引中不存储Field的值
13    public static final Store NO = new Store("NO");
14 }

 

通过Index设置索引方式

 1 public static final class Index extends Parameter implements Serializable {
 2 
 3     private Index(String name) {
 4        super(name);
 5     }
 6 
 7     // 不对Field进行索引,所以这个Field就不能被检索到(一般来说,建立索引而使它不被检索,这是没有意义的)
 8     // 如果对该Field还设置了Field.Store为Field.Store.YES或Field.Store.COMPRESS,则可以检索
 9     public static final Index NO = new Index("NO");
10 
11     // 对Field进行索引,同时还要对其进行分词(由Analyzer来管理如何分词)
12     public static final Index TOKENIZED = new Index("TOKENIZED");
13 
14     // 对Field进行索引,但不对其进行分词
15     public static final Index UN_TOKENIZED = new Index("UN_TOKENIZED");
16 
17     // 对Field进行索引,但是不使用Analyzer
18     public static final Index NO_NORMS = new Index("NO_NORMS");
19 }

 

实例代码如下:

 1 Document doc = new Document();  
 2 Field titleField = new Field("title", title, Store.YES, Index.ANALYZED);  
 3 Field contentField = new Field("content", content, Store.YES, Index.ANALYZED);  
 4 
 5 /** 
 6  * Store.COMPRESS:压缩存储,用于长文本或二进制,但性能受损
 7  * Store.YES : 用于存储字段值。适用于显示搜索结果的字段。例如,文件路径和URL 
 8  * Store.NO : 没有存储字段值。例如,电子邮件消息正文. 存储与索引是没有关系的 
 9  * Index.ANALYZED : 用于字段索引和分析(分词)。例如,电子邮件消息正文和标题 
10  * Index.ANALYZED_NO_NORMS : 分词建索引,但是Field的值不像通常那样被保存,而是只取一个byte,这样节约存储空间       
11  * Index.NO : 适用于未搜索的字段。例如,仅用于存储字段 
12  * Index.NOT_ANALYZED : 用于编制索引但不分析(分词)的字段。它在整体中保留字段的原值。例如,日期和个人名称 
13  * Index.NOT_ANALYZED_NO_NORMS : 不分词建索引,Field的值只取一个byte保存,这样节约存储空间
14  * 注意:NORMS存储了boost所需信息,包含了NORM可能会占用更多内存
15 **/ 16 17 doc.add(titleField); 18 doc.add(contentField);

 

注:实质上一个Document里面的同一个Field可以多次添加,也就是一个数组,这也可以理解为一个Document又可以添加自己的子集,例如下面的例子:

 
TeacherId StuFirstName StuLastName
1 James Jones
2 James Smith
2 Sally Jones
3 James Smith
3 Keith Keith
3 Mat Keith
3 Sally Jones

在上面表格里面包含三个老师,每个老师拥有的同学个数不一样,可以创建三个Document去存储,当然也可以创建更多的Document去处理,这个视实际的需要定。


 

抱歉!评论已关闭.