Elasticsearch:入门采坑笔记-----JAVA客户端篇

1. 客户端

Elasticsearch Clients
Elasticsearch:入门采坑笔记-----JAVA客户端篇_第1张图片

3. JAVA API

Elasticsearch:入门采坑笔记-----JAVA客户端篇_第2张图片
Elasticsearch:入门采坑笔记-----JAVA客户端篇_第3张图片

2. JAVA REST Client

官方提供了两种JAVA REST Client
Elasticsearch:入门采坑笔记-----JAVA客户端篇_第4张图片

  • 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参数来通知结果。

3. SpringBoot下集成ES
  • pom.xml
 <!--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>
  • application.properties
# 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;
4. Java High Level REST Client API
  • 创建索引
/**
	 * 
	 * @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]

在官方文档的这里,找到了相关的说明:
在这里插入图片描述

你可能感兴趣的:(Elasticsearch,elasticsearch,java)