嘿~ 今天天气不错嘛

elastic2.3自定义插件,监测index变化,postIndex,postCreate的执行让我无法理解

Elasticsearch | 作者 xingpan | 发布于2017年10月06日 | 阅读数:3034

进行es index变化监测的插件,基本代码以及完成,在打印测试时,发现了一个诧异的现象。
 
创建index后,浏览器插入数据时,几乎都是postIndex发生变化,偶尔postCreate会响应,我没发理解。
 
删除索引后,创建索引,postCreate没响应。
 
删除索引后,使用post 直接插入数据,es自动创建index,就会postCreate 一次。

es问题截图.png

 
package index_listener;

import org.elasticsearch.index.engine.Engine;
import org.elasticsearch.index.engine.Engine.Index;
import org.elasticsearch.index.indexing.IndexingOperationListener;
import org.elasticsearch.index.shard.IndexShard;
import org.joda.time.DateTime;

public class AuditIndexOpListener extends IndexingOperationListener{

private IndexShard indexShard;

public void AuditIndexOpListener(IndexShard indexShard) {
this.indexShard = indexShard;
}

// @Override
// public void postIndex(Engine.Index index) {
// System.out.print(index.source());
// }

@Override
public void postIndex(Index index) {
System.out.print("索引变化");
System.out.print(index.source());
System.out.println(index.docs());
System.out.println(index.toString());
System.out.println("tyep");
System.out.println(index.opType());

}

@Override
public void postCreate(Engine.Create create) {
System.out.print("创建index");
System.out.print(create.id());
System.out.print(create.type());
System.out.print((new DateTime()).toString());
System.out.print(create.source());

}

@Override
public void postDelete(Engine.Delete delete) {
System.out.print("删除index");
System.out.print(delete.id());
System.out.print(delete.type());
System.out.print((new DateTime()).toString());
System.out.print(delete.version());
}

}

已邀请:

kennywu76 - Wood

赞同来自: xingpan

这里的create指的是文档的opertion type,而非索引本身是否被创建。  索引里新创建一条文档的时候(文档id在索引里不存在), op type就被标示为create;  而如果针对一个已经存在的文档ID进行索引,则该文档的version+1,同时 op type的create=false。
 
我估计你测试的时候,是反复post同一个文档ID,因此只有第一次是新创建一条文档,postCreate被调用,之后都是更新同一个文档,所以调用的是postIndex。

要回复问题请先登录注册