ElasticSearch基本语法(二) java代码实现

一、简介
之前写了一篇ElasticSearch的基本语法(一),现在用Java代码来将上一篇的语句实现,并且加以应用
二、代码实现
(1).连接ElasticSearch服务器的客户端

		//指定集群
		Settings settings = Settings.builder().put("cluster.name", "my-application").build();
		
		InetSocketTransportAddress inetSocketTransportAddress;
		TransportClient transportClient = null;
		try {
			//创建访问ES服务器的客户端
			inetSocketTransportAddress = new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9300);
			transportClient = new PreBuiltTransportClient(settings)
										  .addTransportAddress(inetSocketTransportAddress);
			
			System.out.println(transportClient);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		

下面代码中transportClient是(1)中的获取访问ElasticSearch服务器的客户端接口,并且下面代码都是我在上一篇(ElasticSearch基本语法(一))中的实例的Java代码实现,如果没看过上一篇建议去看看基本语法,不然看这篇会有点累

(2).数据查询,相当于GET test/user/id 返回JSON格式

		GetResponse getResponse = transportClient.prepareGet("test", "user", "id").execute().actionGet();
		System.out.println("result:" + getResponse);

(3).添加文档,相当于PUT test/user/id

	    //添加文档
		try {
			XContentBuilder document = XContentFactory.jsonBuilder()
									   .startObject()
									   .field("name", "csdn")
									   .field("password" , "123")
									   .field("age" , 10)
									   .endObject();
			
			IndexResponse indexResponse = transportClient.prepareIndex("estest", "user", "1")
										  .setSource(document)
										  .get();
			//输出查看是否添加成功
			System.out.println(indexResponse);
		} catch (IOException e) {
			e.printStackTrace();
		}

(4).删除文档

		//删除文档
		DeleteResponse deleteResponse = transportClient.prepareDelete("estest", "user", "1").get();
		//输出结果查看是否删除成功
		System.out.println(deleteResponse);

(5).实现POST方式的文档更新

		//实现文档的更新(POSTS),普通的更新,当文档不存在会报错
		UpdateRequest updateRequest = new UpdateRequest();
		try {
			updateRequest.index("estest")
						 .type("user")
						 .id("1")
						 .doc(
								 XContentFactory.jsonBuilder()
								 				.startObject()
								 				.field("name","csdn")
								 				.field("password", "123456")
								 				.endObject()
							);
			
		UpdateResponse updateResponse = transportClient.update(updateRequest).get();
		
		System.out.println(updateResponse);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}

(6).mget类型批量查询

		//mget类型批量查询
		MultiGetResponse multiGetResponse = transportClient.prepareMultiGet()
											.add("estest" , "user" , "1")
											.add("test" , "user" , "1" ,"2")
											.get();
		//遍历查看数据
		for(MultiGetItemResponse item : multiGetResponse) {
			GetResponse getResponse = item.getResponse();
			if(getResponse !=null && getResponse.isExists()) {
				System.out.println(getResponse);
			}
			
		}

(7).批量添加数据bulk类型

		//批量添加数据bulk
		BulkRequestBuilder bulkRequest = transportClient.prepareBulk();
		try {
			bulkRequest.add(transportClient.prepareIndex("estest", "user", "2")
											.setSource(
													XContentFactory.jsonBuilder()
																   .startObject()
																   .field("name" , "csdn1")
																   .field("password" , "123456")
																   .endObject()
							)
					);
			//下面部分是根据自己批量添加多少个,我这里是添加两个
			bulkRequest.add(transportClient.prepareIndex("estest", "user", "3")
					.setSource(
							XContentFactory.jsonBuilder()
										   .startObject()
										   .field("name" , "csdn2")
										   .field("password" , "123456")
										   .endObject()
							)
					);
			
			BulkResponse bulkResponse = bulkRequest.get();
			System.out.println(bulkResponse);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

(8).match_all查询所有

		//查询所有match_all
		System.out.println("match_all");
		QueryBuilder queryBuilder = (QueryBuilder) QueryBuilders.matchAllQuery();
		
		SearchResponse searchResponse = transportClient.prepareSearch("estest")
										.setQuery(queryBuilder)
										.setSize(3).get();
		
		SearchHits searchHits = searchResponse.getHits();
		for(SearchHit hit : searchHits) {
			System.out.println(hit.getSourceAsString());
			//下面可以省略
			Map<String,Object> map = hit.getSource();
			for(String key : map.keySet()) {
				System.out.println("value:" + map.get(key));
			}
		}

(9).match查询

		System.out.println("match查询");
		//match查询,有分词器	
		QueryBuilder queryBuilder2 = QueryBuilders.matchQuery("name", "csdn");
		SearchResponse searchResponse2 = transportClient.prepareSearch("estest")
										 .setQuery(queryBuilder2)
										 .setSize(4)
										 .get();
		
		SearchHits searchHits2 = searchResponse2.getHits();
		for(SearchHit hit : searchHits2) {
			System.out.println(hit.getSourceAsString());
		}

(10).multi_match查询


		System.out.println("multi_match查询");
		//multi_match查询
		QueryBuilder queryBuilder3 = QueryBuilders.multiMatchQuery("csdn", "name" , "password");
		
		SearchResponse searchResponse3 = transportClient.prepareSearch("estest")
										 .setQuery(queryBuilder3)
										 .setSize(5)
										 .get();
		
		SearchHits searchHits3 = searchResponse3.getHits();
		for(SearchHit hit : searchHits3) {
			System.out.println(hit.getSourceAsString());
		}

(11).term查询

		System.out.println("term查询");
		//term查询
		QueryBuilder queryBuilder4 = QueryBuilders.termQuery("name", "csdn");
		SearchResponse searchResponse4 = transportClient.prepareSearch("estest")
										 .setQuery(queryBuilder4)
										 .setSize(3)
										 .get();
		SearchHits searchHits4 = searchResponse4.getHits();
		for(SearchHit hit : searchHits4) {
			System.out.println(hit.getSourceAsString());
		}

(12).terms查询

		System.out.println("terms查询");
		//terms查询
		QueryBuilder queryBuilder5 = QueryBuilders.termsQuery("name", "csdn1","csdn2");
		SearchResponse searchResponse5 = transportClient.prepareSearch("estest")
										 .setQuery(queryBuilder5)
										 .setSize(3)
										 .get();
		SearchHits searchHits5 = searchResponse5.getHits();
		for(SearchHit hit : searchHits5 ) {
			System.out.println(hit.getSourceAsString());
		}

(13).range范围查询

		System.out.println("range查询");
		//rang查询
		QueryBuilder queryBuilder6 = QueryBuilders.rangeQuery("age").from("20").to("30");
		
		SearchResponse searchResponse6 = transportClient.prepareSearch("estest")
										 .setQuery(queryBuilder6)
										 .setSize(10)
										 .get();
		SearchHits searchHits6 = searchResponse6.getHits();
		for(SearchHit hit : searchHits6) {
			System.out.println(hit.getSourceAsString());
		}

(14).prefix查询

		System.out.println("prefix查询");
		//prefix查询
		QueryBuilder queryBuilder7 = QueryBuilders.prefixQuery("name", "c");
		SearchResponse searchResponse7 = transportClient.prepareSearch("estest")
										 .setQuery(queryBuilder7)
										 .setSize(10)
										 .get();
		SearchHits searchHits7 = searchResponse7.getHits();
		for(SearchHit hit : searchHits7) {
			System.out.println(hit.getSourceAsString());
		}

(15).wildcard通配符查询

		System.out.println("wildcard查询");
		//wildcard查询
		QueryBuilder queryBuilder8 = QueryBuilders.wildcardQuery("name", "*d*");
		SearchResponse searchResponse8 = transportClient.prepareSearch("estest")
										 .setQuery(queryBuilder8)
										 .setSize(10)
										 .get();
		SearchHits searchHits8 = searchResponse8.getHits();
		for(SearchHit hit : searchHits8) {
			System.out.println(hit.getSourceAsString());
		}

(16).fuzzy模糊查询

		System.out.println("fuzzy模糊查询");
		//fuzzy模糊查询
		QueryBuilder queryBuilder9 = QueryBuilders.fuzzyQuery("name", "csdd");
		SearchResponse searchResponse9 = transportClient.prepareSearch("estest")
										 .setQuery(queryBuilder9)
										 .setSize(10)
										 .get();
		SearchHits searchHits9 = searchResponse9.getHits();
		for(SearchHit hit : searchHits9) {
			System.out.println(hit.getSourceAsString());
		}

(17).type查询

		System.out.println("type查询");
		//type查询
		QueryBuilder queryBuilder10 = QueryBuilders.typeQuery("user");
		SearchResponse searchResponse10 = transportClient.prepareSearch("estest")		
										  .setQuery(queryBuilder10)
										  .setSize(20)
										  .get();
		SearchHits searchHits10 = searchResponse10.getHits();
		for(SearchHit hit : searchHits10) {
			System.out.println(hit.getSourceAsString());
		}

(18).ids查询

		System.out.println("ids查询");
		//ids查询
		QueryBuilder queryBuilder11 = QueryBuilders.idsQuery().addIds("1","2");
		SearchResponse searchResponse11 = transportClient.prepareSearch("estest")
										  .setQuery(queryBuilder11)
										  .setSize(10)
										  .get();
		SearchHits searchHits11 = searchResponse11.getHits();
		for(SearchHit hit : searchHits11) {
			System.out.println(hit.getSourceAsString());
		}

(19).聚合查询之求最大值

		//求最大值
		AggregationBuilder aggregationBuilder = AggregationBuilders.max("aggmax").field("age");
		
		SearchResponse searchResponse12 = transportClient.prepareSearch("estest")
										  .addAggregation(aggregationBuilder)
										  .setSize(10)
										  .get();
		Max max = searchResponse12.getAggregations().get("aggmax");
		System.out.println("最大值:" + max.getValue());

(20).聚合查询之求最小值

		//求最小值
		AggregationBuilder aggregationBuilder2 = AggregationBuilders.min("aggmin").field("age");
		SearchResponse searchResponse13 = transportClient.prepareSearch("estest")
										  .addAggregation(aggregationBuilder2)
										  .setSize(10)
										  .get();
		Min min = searchResponse13.getAggregations().get("aggmin");
		System.out.println("最小值:" + min.getValue());

(21)聚合查询之求平均值

		//求平均值
		AggregationBuilder aggregationBuilder3 = AggregationBuilders.avg("aggavg").field("age");
		SearchResponse searchResponse14 = transportClient.prepareSearch("estest")
										  .addAggregation(aggregationBuilder3)
										  .setSize(10)
										  .get();
		Avg avg = searchResponse14.getAggregations().get("aggavg");
		System.out.println("平均值:" + avg.getValue());

(22).聚合查询之求总和

		//求总和
		AggregationBuilder aggregationBuilder4 = AggregationBuilders.sum("aggsum").field("age");
		SearchResponse searchResponse15 = transportClient.prepareSearch("estest")
										  .addAggregation(aggregationBuilder4)
										  .setSize(10)
										  .get();
		Sum sum = searchResponse15.getAggregations().get("aggsum");
		System.out.println("总和:" + sum.getValue());

(23).聚合查询之求基数

		//cardinality基数
		AggregationBuilder aggregationBuilder5 = AggregationBuilders.cardinality("aggcardinality").field("age");
		SearchResponse searchResponse16 = transportClient.prepareSearch("estest")
										  .addAggregation(aggregationBuilder5)
										  .setSize(10)
										  .get();
		Cardinality cardinality = searchResponse16.getAggregations().get("aggcardinality");
		System.out.println("互不相同的基数(cardinality):" + cardinality.getValue());

(24).复合查询

		//复合查询,应该是最常用的
		System.out.println("复合查询");
		QueryBuilder queryBuilder12 = QueryBuilders.boolQuery()
									.should(QueryBuilders.matchQuery("name", "csdn"))
									.must(QueryBuilders.matchQuery("age", 10))
									.should(QueryBuilders.matchQuery("password", "12345"));
		SearchResponse searchResponse17 = transportClient.prepareSearch("estest")
										.setQuery(queryBuilder12)
										.setSize(20)
										.get();
		SearchHits searchHits12 = searchResponse17.getHits();
		for(SearchHit hit : searchHits12) {
			System.out.println(hit.getSourceAsString());
		}

(25).获取ElasticSearch集群信息

		//获取ES集群信息
		ClusterHealthResponse healths =transportClient.admin().cluster().prepareHealth().get();
		
		//获取ES集群的名字
		String clusterName = healths.getClusterName();
		System.out.println("集群名字:" + clusterName);
		
		//获取存放数据的那些节点
		int numberOfDataNodes = healths.getNumberOfDataNodes();
		System.out.println("获取存放数据的那些节点:" + numberOfDataNodes);
		
		//获取全部结点数量
		int numberOfNodes = healths.getNumberOfNodes();
		System.out.println("获取全部节点数量:" + numberOfNodes);
		
		for(ClusterIndexHealth health : healths.getIndices().values()) {
			//获取当前索引名称
			String index = health.getIndex();
			System.out.println("当前索引名称:" + index);
			
			//获取当前索引的主分片数量
			int numberOfShard = health.getNumberOfShards();
			System.out.println("当前索引的主分片数量:" + numberOfShard);
			
			//获取当前索引的副分片数量
			int numberOfReplicas = health.getNumberOfReplicas();
			System.out.println("当前索引的副分片数量:" + numberOfReplicas);
			
			//获取当前集群健康状态
			ClusterHealthStatus status = health.getStatus();
			System.out.println("健康状态:" + status.toString());
		}

版权声明:本文为weixin_42146366原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。