lucene的基本操作-索引相关

1、lucene建立索引

注意这里最后需要释放掉IndexWriter。

实现:


2、lucene进行搜索


这里最后需要关闭IndexReader。

实现:


3、Field.Score - 存储域选项

指示有没有表要把某个字段存储在索引中。有两个值,YES和NO。

当需要对域进行完全的还原的话,应该设置成YES;如果不需要还原,就设置成NO,这样可以减少索引空间的消耗。但是这不影响这个字段的索引。
还原的操作就是document.get(int)来获取到。


4、Field.Index - 索引域选项

只是进行怎样的索引和分词操作。有四个相关的值。

analyzed指示进行分词和索引,not_analyzed只进行索引,但是不进行分词操作,no就是即不分词也不索引
norms存储了很多排序的信息,即评分信息。

总3、4:默认情况下,lucene是不存储(Field.Score.NO)、建立索引、进行分词的(Field.Index.ANALYZED)


5、文档的删除和恢复

writer = new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)));
//参数是一个选项,可以是一个Query,也可以是一个term,term是一个精确查找的值
//此时删除的文档并不会被完全删除,而是存储在一个回收站中的,可以恢复
writer.deleteDocuments(new Term("id","1"));
writer.commit();
被删除的文件被放到了回收站中(.del文件有记录),
IndexReader reader = IndexReader.open(directory,false);
//恢复时,必须把IndexReader的只读(readOnly)设置为false
reader.undeleteAll();
reader.close();
reader默认是只读的。

完全删除,在以前是optimize()方法,这个方法每次会重新建立索引,在删除之后调用这个方法就可以完全删除。在3.5以后已经被废除了。
最新的办法是:
writer = new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)));
writer.forceMergeDeletes();
forceMerge():优化段,合并大量生成的索引段
writer = new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)));
//会将索引合并为2段,这两段中的被删除的数据会被清空
//特别注意:此处Lucene在3.5之后不建议使用,因为会消耗大量的开销,
//Lucene会根据情况自动处理的
writer.forceMerge(2);

6、更新操作

lucene其实没有提供真实的更新操作,它的更新操作其实是先做删除,然后再把新的document写如进去。

writer.updateDocument(new Term("id","1"), doc);
即先根据term找到要更新的文档,然后加入。


7、加权操作

文档加权:docment.setBoost(float boost);默认值是1f。增大值和减小值


8、对日期和数字进行索引

//存储数字
doc.add(new NumericField("attach",Field.Store.YES,true).setIntValue(attachs[i]));
//存储日期
doc.add(new NumericField("date",Field.Store.YES,true).setLongValue(dates[i].getTime()));

9、IndexReader和IndexWriter的生命周期

reader一般最好做成单例的,writer也最好做成单例。因为reader和writer的打开和关闭时很消耗资源的。
但是这样有个问题,就是出现对文档的操作时,如删除,reader和writer还是操作前的,没能跟上操作的节奏,怎么办呢?

IndexReader tr = IndexReader.openIfChanged(reader);
这个方法是这样的,如果没有改变,就返回空,否则返回新的reader。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值