lucene.net杂项

IndexWriter的常用方法

 IndexWriter的用法很简单,IndexWriter的构造函数很重要,AddDocument方法也很重要,有这两个方法,就可以建立索引了。其它的方法都是对建立索引的过程或者结果进行了优化,或者是提供了一些索引中或者索引后的数据。比如,常用的Optimize方法,就是对索引进行优化,使得搜索能够效率更高。还有一些常用的方法(按字母排序):

(1)、AddIndexes方法是合并不同部分索引的,这个方法很有用,比如,用5个线程在5个目录下建立索引,然后用这个方法把5个索引合并为一个,这样就能提高索引的效率;
(2)、Close方法是最后使用的方法,除了能够去除对文件的锁定外,还能起到Flush方法的作用。这个方法非常重要,在IndexWriter实例建立后,无论出现什么样的问题,哪怕程序崩溃,都一定要显式调用该方法。要不然索引会处于锁定状态,无法解除;
(3)、DeleteDocuments是用来删除索引的,使用价值不是太高
(4)、Flush方法是把缓冲数据写入的一个方法,在不想关闭索引但是要清空缓冲区的时候使用;

 

 

索引的部署

索引的部署根据索引的大小而趋向复杂,我认为至少是平方增长。复杂度增长的原因在于,索引大小的增长,将会引入更多需要考虑的因素。比如,索引的重建,索引优化时间,多索引部署等,而分布式部署基本上是目前最复杂的部署方案。

一般来说,应该一个索引存储,只应该由一个IndexWriter来控制。一个存储不应该超过2G,即使是2G,每次索引更新都需要10分钟左右来优化索引。至于如何分配索引,要根据实际情况来决定,而且要考虑诸如程序崩溃等情况。

Field

Field类就是数据库里的一列。一个文档有标题,内容,作者,创建时间这四个属性的话,那么就需要四个Field保存这些属性,然后把四个Field加入到Document中,就有了一行记录。在查询的时候,无论查那个列,总能得到一整行记录,是不是和数据库很相似?

Field本身具有一些属性,就和数据库里的列一样。它的属性通过它的三个内嵌类设置,其实这个地方完全可以用枚举,但是很遗憾的是Java里面没有枚举,所以移植过来也没有转换为枚举。

Field的构造函数也比较多,有7个之多。其中Store,Index和TermVector是通过内部类指定的。

(1)、Store 有三个选项,Field.Store.COMPRESS表示被压缩存储;Field.Store.YES表示储存;Field.Store.NO表示不被存储。

(2)、Index的选项有四个,Field.Index.NO表示不建立索引;Field.Index.TOKENIZED表示分词后索引;Index.NO_NORMS表示值存储内容;Field.Index.UN_TOKENIZED表示不分词索引。

(3)、TermVector这个参数也不常用,它有五个选项。Field.TermVector.NO表示不索引Token的位置属性;Field.TermVector.WITH_OFFSETS表示额外索引Token的结束点;Field.TermVector.WITH_POSITIONS表示额外索引Token的当前位置;Field.TermVector.WITH_POSITIONS_OFFSETS表示额外索引Token的当前和结束位置;Field.TermVector.YES则表示存储向量。

 

Field.Index.NO_NORMS

 

效果似乎和Field.Index.UN_TOKENIZED一样,但是它把词条的附加信息全去掉了。比如,它将不再记录词的正太分布数据一类的东西。这样可以减少占用的空间。而且这个用法也有一个条件,就是只要开启,就要全部开启,否则会失效。比如索引了四条数据没使用NO_NORMS,而接下来的两条使用了NO_NORMS,那么接下来的两条数据实际上并没有产生NO_NORMS的效果。

 

 

怎么有效调整得分

(1)、首先,标题的权重一定比内容的要高;

(2)、根据实际情况调整权重;

比如,现在要索引论坛的内容,那完全可以设置内容很少的帖子权重非常低,这个时候直接设置Document的权重就行了;而如果这个帖子的回复或者访问量 又非常高,那么每个回复或者浏览量,给加0.01的基数,让这个总体量不超过0.2;要是这个帖子是精华贴呢?直接加上0.1吧。

实际的调整过程就是你把各种问题想想全面就好了。

(3)、如果要把一个文档的Document的Boost调得非常高,比如调整成2,那么千万要注意,减少它的内容,内容中出现的词越少越好;

比如,像baidu那种的做个广告,那么就在里面放一个商家买的关键词就行了,其它什么也不要。

(4)、宁可设置Field,比设置Document来得好,设置的方法就不用说啦。

要注意的是,越短的帖子,越要降低它的权重。比如它只有两个字,怎么也要把它的权重调到0.1一下。为什么?因为两个字一般是一个词,这个词如果被搜索,得分就是1,你不调?那不是让水贴浮到最上层了么?

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值