Lucene学习总结-索引

理解Elasticsearch文档与索引操作

Document可以理解成一个网页,由多个Field组成,而查询是根据Field来的。

Document被存储之前需要分词,可以自定义分词器,比如对于HTML文档,分词器过滤掉HTML标签。

索引分段,新建的索引不会被提交,除非执行commit方法。commit后会生成一个新段,段会在某个时刻合并。索引也会自动提交,比如内存达到一定,或者提交的文档达到某个值,都可以设置。

针对某个Field的索引,可以指定是否保存或者是否分词。不分词则索引整个字段。不保存则内容不会显示。也可以增加TermVector,记录位置等等,查询时可用来突出显示。

文档也可以删除,调用writer.deleteDocument(new Term(“ID”, documentID));删除满足查询条件的Document,未必会真正删除。maxDoc()输出最多的Document,包含假删除的文档,numDocs()不包含。

也可以更新文档,writer.updateDocument(new Term(“ID”, documenteId), newDocument);用新文档取代老文档。

改变Document和Field的权重,doc.setBoost(1.5F);用来给文档排序。subjectField.setBoost(1.2F);比如标题具有更高的权重。

Norm,考虑到不同的Document,需要给相同Document归一化。

可以为日期和数字单独索引,不一定要是字符串。Document doc = new Document();
doc.add(new Field("indexDate",
DateTools.dateToString(new Date(), DateTools.Resolution.DAY),
Field.Store.YES,
Field.Index.NOT_ANALYZED);

索引也可以排序,但是要指定Field.Index.NOT_ANALYZED。

Field包含的太多分词会被截断,可以设置。

Optimize,索引页可以优化,比如多索引合并,调用optimize,此功能已退化。

索引写要保证安全,不能都去写。可以打开多个IndexReader。只能有一个IndexWriter,要有多个,需要提供锁。IndexWriter已经改变,IndexReader不会改变,出发重新打开。多个线程可以共享一个IndexReader or IndexWriter。

可以指定索引的锁方法:SimpleFSLockFactory,程序崩溃需要手工移除。NativeFSLockFactory,不会影响NFS。SingleInstanceLockFactory,单个JVM的锁。NoLockFactory,不需要锁。

索引删除:IndexReader可以获得删除数量,可以立即有效。IndexWriter会缓存。

IndexDeletionPolicy:决定移除以前的commit的策略。

合并:1,减少段的数量;2,减少索引的大小,主要是删除旧的索引。

MergePolicy:合并策略的接口。

LogByteSizeMergePolicy:setMergeFactor指定多少个段文件后开始合并。setMaxMergeDocs指定有多少个文档后开始合并。

NFS:关键是如何处理已经删除的文件在某台机器上仍然有遗留。可以实现IndexDeletionPolicy来制定删除策略。

writer.setInfoStream(System.out);可以显示索引日志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值