Lucene:Field设置
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去处理,这个视实际的需要定。