lucene索引的建立相关笔记

在document内部,field是保存在一个Vector类型的对象数组中的。 它的主要作用是用来维护它内部的field信息,包括对field的删除,增加,查找等操作
Segment其实是一个逻辑的概念,在一个索引中,可能有多个segment,lucene对索引管理的最大单位就是segment,。。

二,索引文件格式
1,segment
每一个segment代表lucene的一个完整索引段,每一个segment都有统一的前缀,这个前缀是根据当前索引的document的数量转成36进制,再前面再加一个下划线而成的
2,.fnm格式
该文件中包含了Document中的所有field名称
3,.fdx和.fdt格式
前者是一个索引,用于存储document在后者中的位置,后者是用于存储具有store.YES属性的Field的数据
4,.tii和.tis格式
.tis文件用于存储分词后的词条(term),而.tii就是它的索引文件,它标明了每个.tis文件中的词条的位置
5,deletable格式
所有文档被删除时并不是立刻从索引中去除,而是等待下一次合并索引或是对索引进行优化时才真正删除
6,复合索引格式.cfs,

三,索引的合并与索引优化
Directory类型本身是一个抽象类型,它有两个子类,分别为RAMDirectory和FSDirectory,第一个与内存相关,当lucene向其中写入索引时,则是在内存中的一个区域,优点是索引的速度很快,但却无法持久保存。第二个与文件系统的目录有关,当lucene向其中写入索引时,会直接将索引写到磁盘中。
它们初始化过程:
RAMDirectory ramDir = new RAMDirectory();
FSDirectory fsDir = FSDirectory.getDirectory(INDEX_STORE_PATH,true);
IndexWriter fsWriter = new IndexWriter(fsDir,new StandardAnalyzer(),true);
IndexWriter ramWriter = new IndexWriter(ramDir,new StandardAnalyzer(),true);

1,合并索引:fsWriter.addIndexes(new Directory[]{ramWriter });
在合并内存中的索引时,一定要注意将其相应的IndexWriter关闭,以保证滞留在缓存中的文档被“刷”到RAMDirectory中去,这点与使用FSDirectory时一样,否则索引文件并未真正写入目录中去
2,索引优化:IndexWriter的optimize()

四,从索引中删除文档
4.1索引的读取工具IndexReader
IndexReader reader = IndexReader.open(索引路径);
IndexReader.numDocs()----查看当前索引内总共有多少个Document;
Document(int i)拿到对应的document
一般删除有两种方式,1,通过id,但对于开发者来说,很难获得某个文档在索引内的id值,一般不多用。2,按Field信息来删除,:Term term = new Term(“bookname”,”女”);deleteDocuments(term);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值