关于Lucene的索引的建立
Document,在Lucene中,代表逻辑文档,本身和物理的文件没有关系,作为一种数据源的集合,像Lucene提供原始的要索引的文本内容。
Field类型主要是用于标识当前数据源的各种属性,存储来自数据源的数据内容。
Document-Field类似于关系型数据库,一张表可以看成是Lucene中的索引,表中的每一条记录就是Lucene,而表中的每一个字段就是Field.
数据源的各种属性包括以下部分:
- 是否存储:该数据源的数据是否完整存储于索引中,适合于内容较为较短的简单数据源,若将大段文本存储在索引中,会使索引容量过大。
- 是否索引:该数据源的数据是否要在用户检索时被检索。
- 是否分词:该数据源的数据是否要晋国分词。
举例而言: 图书管理系统
书号:id,书号是唯一编号,需要索引和存储,但不需要分词。
书名:需要分词、索引,另外在查询结果中需要完整显示,所以需要存储。
作者名:类似于书号,需要存储和索引,不需要索引。
书的出版日期:不需要对出版日期查询,因此不需要被索引,但在现实结果时需要显示。因此需要存储,不需要索引和分词。
书的摘要:当不需要包含完整的摘要信息时,不需要对摘要的完整信息进行存储。索引和分词。
价格:存储,不需要分词和索引。
Store.NO:表示该Field不需要被存储
Store.Yes: 表示该Field需要被存储
Store.COMPRESS:表示使用压缩方式来保存Field的值
Index.NO:该Field不需要索引,既不需要查找
Index.TOKENIZED:表示该Field先被分词再索引
Index.UN_TOKENIZED:表示不对该Field进行分词,但是要对它进行索引,也就是该Field会被用户查找。
Index.no_norms:表示对该Field进行索引,但是不使用Analyzer,同时禁止它参加评分,主要时为了减少内存的消耗。
/**
* Store配置field字段是否存储到索引库
* YES:字段存储到索引库中,以后查询的时候可以查询出来
* No:不存储到索引库中
* Index: Lucene为提高查询效率,会像字典一样创建索引. 配置此字段是否要建立索引(建立索引的Field就是Term),
* 如果建立索引以后就可以通过此字段查询记录
* NOT_ANALYZED: 创建索引,但是Field的不分词(不分开) 整体作为一个索引
* ANALYZED: 不但要建立索引此Field会被分词(可能一个Field分为多个Term的情况)
* NO: 不建立索引,以后不能通过此字段查询数据
* Store yes Index: ANALYZED: 此Field可以存储,而且Field 关键字支持分词
* Store yes Index: NOT_ANALYZED 此Field可以存储,但是Field不支持分词,作为一个完成Term 例如: 数字 id price 和URL 专业词汇
* Store yes Index: NO: 可以查询出此字段, 但是此字段不作为查询关键字
* Store no Index: ANALYZED: 此Field不存储,但是此Field可以做为关键字搜索
* Store no Index: NOT_ANALYZED: 此Field不存储,但是此Field可以做为整体(不拆分)关键字搜索
* Store no Index: NO: 既不建索引也不存储 没有任何意义,如果这样配置则会抛出异常
*/