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);可以显示索引日志。
理解Elasticsearch文档与索引操作
4313

被折叠的 条评论
为什么被折叠?



