Java Low Level REST Client: the official low-level client for Elasticsearch. It allows to communicate with an Elasticsearch cluster through http. Leaves requests marshalling and responses un-marshalling to users. It is compatible with all Elasticsearch versions.
低级别的REST客户端,通过http与集群交互,用户需自己编组请求JSON串,及解析响应JSON串。兼容所有ES版本。
Java High Level REST Client: the official high-level client for Elasticsearch. Based on the low-level client, it exposes API specific methods and takes care of requests marshalling and responses un-marshalling.
高级别的REST客户端,基于低级别的REST客户端,增加了编组请求JSON串、解析响应JSON串等相关api。使用的版本需要保持和ES服务端的版本一致,否则会有版本问题。
偏向采用高级别的Client,从6.0.0开始加入的,目的是以java面向对象的方式来进行请求、响应处理。每个API 支持 同步/异步 两种方式,同步方法直接返回一个结果对象。异步的方法以async为后缀,通过listener参数来通知结果。
<!--elasticsearch-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.7.0</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.7.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.7.0</version>
</dependency>
# Elasticsearch 集群配置
spring.data.elasticsearch.cluster-name=my-es
spring.data.elasticsearch.cluster-nodes=172.16.254.154:9300,172.27.28.79:9300
spring.elasticsearch.rest.uris=172.16.254.154:9200,172.27.28.79:9200
// es
@ Autowired
RestHighLevelClient restHighLevelClient;
/**
*
* @Title: createIndex @Description: 创建索引 @param: @param
* indexName @param: @param mapping @return: void @throws
*/
public void createIndex(String indexName)
{
try
{
CreateIndexRequest request = new CreateIndexRequest(indexName);
// 设置分片与副本
request.settings(
Settings.builder().put("index.number_of_shards", 3).put("index.number_of_replicas", 2));
// mapping
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.startObject("properties");
{
builder.startObject("message");
{
builder.field("type", "text");
}
builder.endObject();
}
builder.endObject();
}
builder.endObject();
request.mapping(builder);
// 响应
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request,
RequestOptions.DEFAULT);
boolean acknowledged = createIndexResponse.isAcknowledged();
boolean shardsAcknowledged = createIndexResponse.isShardsAcknowledged();
}
catch (Exception e)
{
logger.error("索引创建失败!", e);
}
}
/**
*
* @Title: indexDocument @Description: 索引文档 @param: @param
* restHighLevelClient @param: @param indexName @param: @param
* params @param: @throws IOException @return: void @throws
*/
public static void indexDocument(RestHighLevelClient restHighLevelClient , String indexName ,
List<LgaDeviceSuperParam> params) throws IOException
{
BulkRequest request = new BulkRequest();
params.forEach(item -> {
request.add(new IndexRequest(indexName).id(UUID.randomUUID().toString()).opType(OpType.CREATE)
.source(item, XContentType.JSON));
});
restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
}
批量索引文档,结果疯狂报错:
[2020-06-16T17:10:33,617][INFO ][o.e.a.b.TransportShardBulkAction] [154] [lga][0] mapping update rejected by primary
java.lang.IllegalArgumentException: Limit of mapping depth [20] in index [lga] has been exceeded due to object field [LgaDeviceSuperParam(id=499, gmtCreate=Fri Nov 15 04:03:43 CST 2019, gmtModified=Fri Nov 15 04:03:43 CST 2019, devicePid=AAL219C0219, deviceTime=Fri Nov 15 03:58:22 CST 2019, samplingSup1=系统正常工作中, samplingSup2=0, samplingSup3=500.0, samplingSup4=500.0, samplingSup5=1.01, samplingSup6=300.0, samplingSup7=1.01, samplingSup8=100.0, samplingSup9=144318.0, samplingSup10=144412.0, samplingSup11=0.0, samplingSup12=0.0, samplingSup13=0.0, samplingSup14=0.0, samplingSup15=0.0, samplingSup16=0.0, samplingSup17=0.0, samplingSup18=0.0, samplingSup19=0.0, samplingSup20=500.0, samplingSup21=0.0, samplingSup22=2.71663, samplingSup23=2.71663, samplingSup24=0.0350334, samplingSup25=0.0, samplingSup26=0.0, samplingSup27=0.0, samplingSup28=0.0, samplingSup29=0.0, samplingSup30=0.0, samplingSup31=0.0, samplingSup32=0.0, samplingSup33=0.0, samplingSup34=0.0, samplingSup35=0.0, samplingSup36=0.0, samplingSup37=0.0, samplingSup38=0.0, samplingSup39=0.0, samplingSup40=0.0, samplingSup41=0.0, samplingSup42=0.0, samplingSup43=0]
at org.elasticsearch.index.mapper.MapperService.checkDepthLimit(MapperService.java:636) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.index.mapper.MapperService.checkDepthLimit(MapperService.java:623) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:529) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:418) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:350) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.bulk.TransportShardBulkAction.executeBulkItemRequest(TransportShardBulkAction.java:274) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.bulk.TransportShardBulkAction$2.doRun(TransportShardBulkAction.java:157) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.bulk.TransportShardBulkAction.performOnPrimary(TransportShardBulkAction.java:202) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:114) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:81) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryShardReference.perform(TransportReplicationAction.java:895) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.support.replication.ReplicationOperation.execute(ReplicationOperation.java:109) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.runWithPrimaryShardReference(TransportReplicationAction.java:374) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.lambda$doRun$0(TransportReplicationAction.java:297) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:63) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.index.shard.IndexShard.lambda$wrapPrimaryOperationPermitListener$24(IndexShard.java:2790) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.ActionListener$3.onResponse(ActionListener.java:113) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.index.shard.IndexShardOperationPermits.acquire(IndexShardOperationPermits.java:285) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.index.shard.IndexShardOperationPermits.acquire(IndexShardOperationPermits.java:237) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.index.shard.IndexShard.acquirePrimaryOperationPermit(IndexShard.java:2764) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.support.replication.TransportReplicationAction.acquirePrimaryOperationPermit(TransportReplicationAction.java:836) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.support.replication.TransportReplicationAction$AsyncPrimaryAction.doRun(TransportReplicationAction.java:293) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.action.support.replication.TransportReplicationAction.handlePrimaryRequest(TransportReplicationAction.java:256) ~[elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.xpack.security.transport.SecurityServerTransportInterceptor$ProfileSecuredRequestHandler$1.doRun(SecurityServerTransportInterceptor.java:257) [x-pack-security-7.7.0.jar:7.7.0]
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) [elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.xpack.security.transport.SecurityServerTransportInterceptor$ProfileSecuredRequestHandler.messageReceived(SecurityServerTransportInterceptor.java:315) [x-pack-security-7.7.0.jar:7.7.0]
at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:63) [elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.transport.TransportService$7.doRun(TransportService.java:767) [elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:692) [elasticsearch-7.7.0.jar:7.7.0]
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) [elasticsearch-7.7.0.jar:7.7.0]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_102]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_102]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_102]