读书人

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

发布时间: 2012-10-24 14:15:58 作者: rapoo

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

?

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

?

1. 索引

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

? ? 1) Index.ANALYZED

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

? ? 2) Index.NOT_ANALYZED

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

? ? 3) Index.ANALYZED_NO_NORMS

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

? ? 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的构造器有很多:

? ??九) 第二章 索引:Field的设置

?

5. 小结

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

Index? ? ? ? ?StoreTermVector?常见用处NOT_ANALYZED?YESNO文件名、URL、电话、日期等ANALYZEDYESWITH_POSITIONS_OFFSETS标题、摘要ANALYZEDNOWITH_POSITIONS_OFFSETS正文NOYESNO分类、数据库主键等只用来在结果中显示的NOT_ANALYZEDNONO隐藏的关键字

读书人网 >软件架构设计

热点推荐