Elasticsearch Java API操作总结

创建Maven项目

  • 修改pom文件,增加Maven依赖关系
<dependencies>
	<dependency>
		<groupId>org.elasticsearch</groupId> 
		<artifactId>elasticsearch</artifactId> 
		<version>7.13.2</version>
	</dependency>
	<!-- elasticsearch 的客户端 --> 
	<dependency>
		<groupId>org.elasticsearch.client</groupId> 
		<artifactId>elasticsearch-rest-high-level-client</artifactId> 
		<version>7.13.2</version>
	</dependency>
	<!-- elasticsearch依赖2.x的log4j --> 
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.8.2</version>
	</dependency>
	<dependency>
     <groupId>org.apache.logging.log4j</groupId>
     <artifactId>log4j-core</artifactId>
     <version>2.8.2</version>
	</dependency>
	<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.9.9</version>
	</dependency>
	<!-- junit 单元测试 -->
	<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
	</dependency>
</dependencies>
  • 创建客户端对象
package com.cjl.test;

import java.io.IOException;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;

public class ESTest_Client {
	public static void main(String[] args) throws IOException {
		RestHighLevelClient client = new RestHighLevelClient(
			RestClient.builder(new HttpHost("localhost",9200,"http"))
		);
		client.close();
	}
}

索引操作

创建索引

package com.cjl.test;

import java.io.IOException;

import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;

public class ESTest_Client {
	public static void main(String[] args) throws IOException {
		RestHighLevelClient client = new RestHighLevelClient(
			RestClient.builder(new HttpHost("localhost",9200,"http"))
		);
		// 创建索引 - 请求对象
		CreateIndexRequest request = new CreateIndexRequest("user");
		// 发送请求,获取响应 creat之后可能删除
		@SuppressWarnings("deprecation")
		CreateIndexResponse response = client.indices().create(request,RequestOptions.DEFAULT);
		// 获取响应状态
		boolean acknowledged =  response.isAcknowledged();
		System.out.println("索引操作状态 = " + acknowledged);		
		client.close();
	}
}

查询和删除索引

// 查询索引
GetIndexRequest request = new GetIndexRequest("user");
// 发送请求 获得响应
GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
System.out.println(response.getAliases());
System.out.println(response.getMappings());
client.close();

// 删除索引
DeleteIndexRequest request = new DeleteIndexRequest("user");
// 获取响应
AcknowledgedResponse response  = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(response.isAcknowledged());

文档操作

新增文档

// 创建用户类
package com.cjl.test;

public class User {
	private String name;
	private Integer age;
	private String sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
}

// 新增文档 - 请求对象
IndexRequest indexRequest = new IndexRequest();
// 设置索引和唯一标识
indexRequest.index("user").id("1");
// 创建数据对象
User user = new User();
user.setAge(20);
user.setName("cjl");
user.setSex("男");
// 把数据转换成JSON格式
ObjectMapper objectMapper = new ObjectMapper();
String productJson = objectMapper.writeValueAsString(user);
// 添加文档数据,获取响应对象
indexRequest.source(productJson,XContentType.JSON);
// 发送请求 获取响应对象
IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
System.out.println(response.getResult());

修改文档

// 修改文档 - 请求对象
UpdateRequest request = new UpdateRequest();
// 配置修改参数
request.index("user").id("1");
// 设置请求体,对数据进行修改
request.doc(XContentType.JSON, "sex", "女");
// 客户端发送请求,获取响应对象
UpdateResponse response = client.update(request, RequestOptions.DEFAULT); 
System.out.println("_index:" + response.getIndex());
System.out.println("_id:" + response.getId()); 
System.out.println("_result:" + response.getResult());

查询文档

// 创建请求对象
GetRequest request = new GetRequest().index("user").id("1");
// 客户端发送请求
GetResponse response = client.get(request, RequestOptions.DEFAULT);
System.out.println(response.getSourceAsString());

删除文档

//创建请求对象
DeleteRequest request = new DeleteRequest().index("user").id("1"); 
//客户端发送请求,获取响应对象
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT); //打印信息
System.out.println(response.toString());

批量增加 和 删除

//创建批量新增请求对象
BulkRequest request = new BulkRequest();
request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON, "name", "zhangsan","age":30,"sex":"男"));
request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name","lisi","age":30,"sex":"男"));
request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name","wangwu","age":40,"sex":"女"));
request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON, "name", "wangwu1","age":30,"sex":"男"));
request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name","lisi1","age":30,"sex":"女"));
request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name","wangwu2","age":50,"sex":"男"));
//客户端发送请求,获取响应对象
BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT); //打印结果信息
System.out.println("took:" + responses.getTook()); 
System.out.println("items:" + responses.getItems());

//创建批量删除请求对象
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest().index("user").id("1001")); 
request.add(new DeleteRequest().index("user").id("1002"));
request.add(new DeleteRequest().index("user").id("1003")); 
//客户端发送请求,获取响应对象
BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT); 
//打印结果信息
System.out.println("took:" + responses.getTook()); 
System.out.println("items:" + responses.getItems());

高级查询

查询所有索引数据

//创建搜索请求对象
SearchRequest request = new SearchRequest();
request.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder =  new SearchSourceBuilder();
// 查询所有数据 
sourceBuilder.query(QueryBuilders.matchAllQuery());
request.source(sourceBuilder);
// 查询
SearchResponse response =  client.search(request, RequestOptions.DEFAULT);

SearchHits hits = response.getHits();
System.out.println("took:" + response.getTook());
System.out.println("MaxScore:" + hits.getMaxScore());
for(SearchHit hit: hits){
	System.out.println(hit.getSourceAsString());
}

条件查询

// 创建搜索请求对象
SearchRequest request = new SearchRequest(); 
request.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
sourceBuilder.query(QueryBuilders.termQuery("age", "30")); 
request.source(sourceBuilder);

SearchResponse response = client.search(request, RequestOptions.DEFAULT); 
// 查询匹配
SearchHits hits = response.getHits();
System.out.println("timeout:" + response.isTimedOut());
System.out.println("total:" + hits.getTotalHits());

System.out.println("hits========>>");
for (SearchHit hit : hits) { 
System.out.println(hit.getSourceAsString());
}
System.out.println("<<========");

分页查询

// 创建搜索请求对象
SearchRequest request = new SearchRequest(); 
request.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
sourceBuilder.query(QueryBuilders.matchAllQuery()); 
//  分页查询 当前页 from (当前页码-1)*每页显示数据条数
sourceBuilder.from(0);
// 每页显示多少条数据 size
sourceBuilder.size(2);
request.source(sourceBuilder);

SearchResponse response = client.search(request, RequestOptions.DEFAULT); 
SearchHits hits = response.getHits();
for (SearchHit hit : hits) { 
	System.out.println(hit.getSourceAsString());
}

数据排序

SearchRequest request = new SearchRequest().indices("user");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
sourceBuilder.query(QueryBuilders.matchAllQuery()); 
sourceBuilder.sort("age",SortOrder.DESC);
request.source(sourceBuilder);

过滤字段

// 创建搜索请求对象
SearchRequest request = new SearchRequest(); 
request.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
sourceBuilder.query(QueryBuilders.matchAllQuery()); 
String [] includes = {"name","age"};
String [] excludes = {};
sourceBuilder.fetchSource(includes, excludes);
request.source(sourceBuilder);

组合查询

SearchRequest request = new SearchRequest(); 
request.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();	
// 必须包含
boolQueryBuilder.must(QueryBuilders.matchQuery("age", "30"));
// 一定不含
boolQueryBuilder.mustNot(QueryBuilders.matchQuery("name", "zhangsan")); 
// 可能包含
boolQueryBuilder.should(QueryBuilders.matchQuery("sex", "男"));
sourceBuilder.query(boolQueryBuilder);
request.source(sourceBuilder);

范围查询

SearchRequest request = new SearchRequest(); 
request.indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age"); 
// 大于等于
rangeQuery.gte("30");
// 小于等于
rangeQuery.lte("40");
sourceBuilder.query(rangeQuery);
request.source(sourceBuilder);

模糊查询

SearchRequest request = new SearchRequest().indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 差一个字符能匹配 偏差距离
sourceBuilder.query(QueryBuilders.fuzzyQuery("name", "cjl").fuzziness(Fuzziness.ONE));
request.source(sourceBuilder);

高亮查询

SearchRequest request = new SearchRequest().indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 构建高亮查询方式
TermQueryBuilder termsQueryBuilders = QueryBuilders.termQuery("name", "cjl");
// 设置查询方式
sourceBuilder.query(termsQueryBuilders);
//构建高亮字段
HighlightBuilder highlightBuilder = new HighlightBuilder(); 
highlightBuilder.preTags("<font color='red'>");//设置标签前缀 
highlightBuilder.postTags("</font>");//设置标签后缀 
highlightBuilder.field("name");//设置高亮字段
//设置高亮构建对象
sourceBuilder.highlighter(highlightBuilder);
request.source(sourceBuilder);

SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for(SearchHit hit : hits){
	System.out.println(hit.getSourceAsString());
	//打印高亮结果
	Map<String, HighlightField> highlightFields = hit.getHighlightFields(); 
	System.out.println(highlightFields);
}

聚合查询

SearchRequest request = new SearchRequest().indices("user");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.aggregation(AggregationBuilders.max("maxAge").field("age"));
request.source(sourceBuilder);

SearchResponse response = client.search(request, RequestOptions.DEFAULT);
System.out.println(response);


// 分组查询
AggregationBuilder aggregationBuilder = AggregationBuilders.terms("ageGroup").field("age");
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值