9) 第二章 索引:Field的设置

    Field也许算是Lucene索引阶段最重要的类,它是存储被索引值的类。当创建Field时,Lucene为其提供了诸多选项供你选择。

1. 索引

    索引选项(Field.Index.*)用来控制域中的文本如何通过反向索引搜索。共有如下选项:

    1) Index.ANALYZED

          最常用的设置,采用分词策略,将原文拆分成词元(通常用在正文、标题、摘要等域)

    2) Index.NOT_ANALYZED

          不采用分词策略,即把原文当作一整个词元对待(通常用在URL、文件路径、日期等域)

    3) Index.ANALYZED_NO_NORMS

          它是Index.ANALYZED的高级变种,在索引文件中不存储规则信息,比如一些优先策略

扫描二维码关注公众号,回复: 821044 查看本文章

    4) Index.NOT_ANALYZED_NO_NORMS

          类似上面,它是Index.NOT_ANALYZED的高级变种

    5) Index.NO

          指定为此选项的域将不能被搜索到

2. 存储

    存储选项(Field.Store.*)用来决定是否将域值存储起来。共有如下选项:

    1) Store.YES

    2) Store.NO

    标识为YES的域值将会被存储在index中,搜索阶段可以用IndexReader检索到它。此选项对于需要在查询结果中显示的域非常有用(如URL、标题等)。

    Lucene中包含一个非常有用的工具类,CompressionTools,它提供了压缩和解压byte数组的方法。其内部调用了java的内置java.util.Zip包中的方法。在存储之前你可以利用它先将内容压缩,但是压缩会降低索引和搜索的效率,对于很小的域值,通常并不值得去压缩。

3. 检索词向量

    这个稍微麻烦一些,不展开了。选项如下:

    1) TermVector.YES

    2) TermVector.WITH_POSITIONS

    3) TermVector.WITH_OFFSETS

    4) TermVector.WITH_POSITIONS_OFFSETS

    5) TermVector.NO

    需要注意的是,如果设置了Index.NO, 则必须是TermVector.NO. 即前四个选项必须建立在域值可索引的基础上。

4. Field的构造器

    Field的构造器有很多:

    

5. 小结

    组合以上选项,主要有如下用法:

Index          Store TermVector  常见用处
NOT_ANALYZED  YES NO 文件名、URL、电话、日期等
ANALYZED YES WITH_POSITIONS_OFFSETS 标题、摘要
ANALYZED NO WITH_POSITIONS_OFFSETS 正文
NO YES NO 分类、数据库主键等只用来在结果中显示的
NOT_ANALYZED NO NO 隐藏的关键字

猜你喜欢

转载自bun-ny.iteye.com/blog/1073237
今日推荐