索引创建中,需要配置索引的内容是否存储和是否进行分词的操作。特别注意的是索引的NORMS,存储这索引的时间,以及索引的优先级,我们需要在添加索引的时,需要选择正确的索引策略。
Field.Store.YES和NO的问题
YES:表示建立索引的时候,域(需要建立索引的数据)中的数据都存起来,我们读取索引的时候,才可以获取到索引域中的数据
NO:表示把这个域中的内容不存储到索引中,但是可以被索引,但是类容不可以完全还原
那么就不可以直接使用doc.get(“域”),一般对于文章类容,文档内容,不进行索引
doc.add(new Field("path",file.getAbsolutePath(),Field.Store.YES,Field.Index.NOT_ANALYZED));
Field.Index.选项
Index.ANALYZED_NOT_NORMS
和Index.NOT_ANALYZED_NOT_NORMS
不会在索引中存储norms信息,norms记录了索引中的index-time boost信息(boost可以用于记录数据的优先级),当你进行搜索时比较费内存
索引策略 | 意义 | 场景 |
---|---|---|
Index.ANALYZED | 进行分词和索引 | 标题和类容 |
Index.NOT_ANALYZED | 进行索引,但是不进行分词 | 关键字 日期,手机号,身份证号 |
Index.ANALYZED_NOT_NORMS | 进行分词但是不存储NORMS | 数据库主键 |
Index.NOT_ANALYZED_NOT_NORMS | 不分词也不存信息 | 数据库主键 |
Index.NO | 不进行索引 | 文档类型,数据库主键 |
最佳策略
Index | Field.Store | 场景 |
---|---|---|
ANALYZED | YES | 文章标题和摘要 |
NOT_ANALYZED | YES | 文档正文、URL、 |
NOT_ANALYZED | NO | 影藏关键字 |
Index.NO | YES | 数据库主键,文章类型,不进行索引 |
Index.NOT_ANALYZED_NOT_NORMS | YES | 姓名,日期,电话号,邮箱,标识符 |
参考文档:
http://blog.csdn.net/duck_genuine/article/details/6053430