[lucene]索引建立

Lucene索引建立的过程,类似于将数据进行关键字提取,设置标签,在后续工作中,可以通过这个标签进行内容过滤获取期望数据的操作。

lucene建立索引过程很简单,归结起来,就是:

获取数据 -> 设置建立索引规则 -> 建立索引 -> 写入磁盘/内存

建立索引涉及几个类:

1、 IndexWriter

执行索引写操作,并且控制索引建立过程的各种参数。包括参数:

1)索引存放位置

索引存放位置有两种:磁盘 和 内存

所以以下几种方式来建立IndexWriter:

2)分词器

分词器是一个重要的成分,在写入索引之前,将文本信息切割成为多个可以用于索引的词条,分词器继承于 org.apache.lucene.analysis.Analyzer ,lucene内置了一系列分词器,但是相当较为简单,目前有一些开源组织开发的分词器,比如IK_CAnalyzer等(IK_CAnalyzer这个类在提供的jar中式final的,说明了这个开发者相对保守,无法继承重写,不开源)

 

3)是否重新建立索引

true:清空、重新建立索引

false:增量建立索引

 

2、Document

document是一条索引内容的集合,一条document类似于一条数据库记录,有自己的字段和字段对应的值,类似如下结构

[<key1,value>,<key2,value>,<key3,value>...]

document建立在vector之上,对其中“字段”的操作,都直接体现在vector的操作。

建立方式如下:

 

3、Field

 

相对于Document,其中的字段,即Field,即具体的一个索引

* Field.Index有四个属性,分别是:
Field.Index.TOKENIZED:分词索引
Field.Index.UN_TOKENIZED:分词进行索引,如作者名,日期等,Rod Johnson本身为一单词,不再需要分词。
Field.Index:不进行索引,存放不能被搜索的内容如文档的一些附加属性如文档类型, URL等。
Field.Index.NO_NORMS:;
* Field.Store也有三个属性,分别是:
Field.Store.YES:索引文件本来只存储索引数据, 此设计将原文内容直接也存储在索引文件中,如文档的标题。
Field.Store.NO:原文不存储在索引文件中,搜索结果命中后,再根据其他附加属性如文件的Path,数据库的主键等,重新连接打开原文,适合原文内容较大的情况。
Field.Store.COMPRESS 压缩存储;
* termVector是Lucene 1.4.3新增的它提供一种向量机制来进行模糊查询,很少用。
1.1 Field 的解释
从源代码中,可以看出Field 构造函数如下:
Field(String name, byte[] value, Field.Store store)
Field(String name, Reader reader)
Field(String name, Reader reader, Field.TermVector termVector)
Field(String name, String value, Field.Store store, Field.Index index)
Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector)

在Field当中有三个内部类:Field.Index,Field.Store,Field.termVector。其中

* Field.Index有四个属性,分别是:
Field.Index.TOKENIZED:分词索引 analysis?
Field.Index.UN_TOKENIZED:分词进行索引,如作者名,日期等,Rod Johnson本身为一单词,不再需要分词。不同?
Field.Index:不进行索引,存放不能被搜索的内容如文档的一些附加属性如文档类型, URL等。
Field.Index.NO_NORMS:;

* Field.Store也有三个属性,分别是:
Field.Store.YES:索引文件本来只存储索引数据, 此设计将原文内容直接也存储在索引文件中,如文档的标题。
Field.Store.NO:原文不存储在索引文件中,搜索结果命中后,再根据其他附加属性如文件的Path,数据库的主键等,重新连接打开原文,适合原文内容较大的情况。
Field.Store.COMPRESS 压缩存储;
* termVector是Lucene 1.4.3新增的它提供一种向量机制来进行模糊查询,很少用。

上面所说的Field属性与lucene1.4.3版本的有比较大的不同,在旧版的1.4.3里lucene是通过Field.Keyword (...),FieldUnIndexed(...),FieldUnstored(...)和Field.Text(...)来设置不同字段的类型以达 到不同的用途,而当前版本由Field.Index和Field.Store两个字段的不同组合来达到上述效果。
还有一点说明,其中的两个构造函数其默认的值为Field.Store.NO和Field.Index.TOKENIZED。:

Field(String name, Reader reader)
Field(String name, Reader reader, Field.TermVector termVector)

col:Store, row:IndexYESNOCOMPRESS
NO存储,但是不建立索引,当然也就不分析。这样的字段无法搜索,但是会出现在搜索结果中。无意义。引发Illegal Argument Exception。基本等同于YES,但是外加了压缩。对于较长的文本和二进制的字段,应该选用这个参数。计算量更大。
ANALYZED分析,索引,存储。分析,索引,不存储。分析,索引,压缩存储。
NOT_ANALYZED不分析,但是索引,存储。不分析,直接索引,但是不存储。不分析,但是索引,压缩存储。
NOT_ANALYZED_NO_NORMS(高级)(高级)(高级)
ANALYZED_NO_NORMS(高级)(高级)(高级)

不被切割、被索引并完整保存:链接地址URLs、文件系统路径信息、时间日期、人名、居民身份证、号码、电话号码。

不被切割、不被索引、存储:网页的URL引用地址。

被切割、被索引、不存储:不需要以原有的形式来重现原始数据的大规模文本,比如网页的主体部分或者是庞大的文本文档。

Field可以构造自己的构造函数

 

-----------------------------

以上几个就是建立索引所涉及的类,明白了以上几个类的功能,建立索引就很明显的过程了:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值