es使用java的api操作
pom依赖
<?xml version="1.0" encoding="UTF-8"?>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.player3.es
estest
0.0.1-SNAPSHOT
estest
Demo project for Spring Boot
?
1.8
UTF-8
UTF-8
2.3.7.RELEASE
?
org.elasticsearch
elasticsearch
7.8.0
org.elasticsearch.client
elasticsearch-rest-high-level-client
7.8.0
org.apache.logging.log4j
log4j-api
2.8.2
org.apache.logging.log4j
log4j-core
2.8.2
com.fasterxml.jackson.core
jackson-databind
2.9.9
junit
junit
4.12
?
org.springframework.boot
spring-boot-starter
?
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
?
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
?
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
1.8
1.8
UTF-8
org.springframework.boot
spring-boot-maven-plugin
2.3.7.RELEASE
com.player3.es.estest.EstestApplication
repackage
repackage
?
?
创建索引 EsTest_Client
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
///关闭连接
esclient.close();
}
通过:localhost:9200/_cat/indices?v 查看,确实新增一条索引
查询索引 EsTest_index_search
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
?
GetIndexRequest player3 = new GetIndexRequest("player3");
GetIndexResponse response = esclient.indices().get(player3, RequestOptions.DEFAULT);
?
System.out.println(response.getAliases());
System.out.println(response.getDataStreams());
System.out.println(response.getDefaultSettings());
System.out.println(response.getIndices());
System.out.println(response.getMappings());
System.out.println(response.getSettings());
///关闭连接
esclient.close();
}
删除索引: EsTest_index_delete
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
DeleteIndexRequest shoppingg = new DeleteIndexRequest("shoppingg");
?
AcknowledgedResponse delete = esclient.indices().delete(shoppingg, RequestOptions.DEFAULT);//create(request, RequestOptions.DEFAULT);
///关闭连接
System.out.println(delete.isAcknowledged());
esclient.close();
}
在索引下新增数据 EsTest_Client_Doc_Insert
class User
?
private String name;
private String sex;
private Integer age;
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
//插入数据
IndexRequest indexRequest = new IndexRequest();
//需要插入的数据 index|索引 id|唯一标识
indexRequest.index("user").id("1020");
User user = new User();
user.setName("李为");
user.setSex("男");
user.setAge(27);
// 向es插入数据,必须将数据转换为json jackson
ObjectMapper mapper=new ObjectMapper();
String userjson = mapper.writeValueAsString(user);//对象转str
indexRequest.source(userjson, XContentType.JSON);//index为user,id1020的数据
IndexResponse index = esclient.index(indexRequest, RequestOptions.DEFAULT);
System.out.println(index);
///关闭连接
esclient.close();
}
索引下的修改数据 EsTest_Client_Doc_Update
?
//TODO 如果直接把全部的值替换 就是全量更新
// public static void main(String[] args) throws IOException {
// //创建es客户端对象
// RestHighLevelClient esclient = new RestHighLevelClient(
// RestClient.builder(new HttpHost("localhost",9200,"http"))
// );
// //插入数据
// IndexRequest indexRequest = new IndexRequest();
// //需要插入的数据 index|索引 id|唯一标识
// indexRequest.index("user").id("1020");
//
// User user = new User();
// user.setName("李为");
// user.setSex("男");
// user.setAge(26);
// // 向es插入数据,必须将数据转换为json jackson
// ObjectMapper mapper=new ObjectMapper();
// String userjson = mapper.writeValueAsString(user);//对象转str
// indexRequest.source(userjson, XContentType.JSON);//index为user,id1020的数据
// IndexResponse index = esclient.index(indexRequest, RequestOptions.DEFAULT);
// System.out.println(index);
// ///关闭连接
// esclient.close();
// }
?
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
?
?
UpdateRequest update = new UpdateRequest();
update.index("user").id("1020");
update.doc(XContentType.JSON,"sex","女","age",18);
?
esclient.update(update, RequestOptions.DEFAULT);
esclient.close();
}
索引下的删除数据 EsTest_Client_Doc_delete
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
DeleteRequest deleteRequest = new DeleteRequest();
deleteRequest.index("user").id("1020");
esclient.delete(deleteRequest, RequestOptions.DEFAULT);
?
?
///关闭连接
esclient.close();
}
索引下的批量插入 EsTest_Client_Doc_insert_bash
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
BulkRequest request = new BulkRequest();
request.add(new IndexRequest().index("user").id("1010").source(XContentType.JSON,
"name","李伟","age",27,"sex","男"));
request.add(new IndexRequest().index("user").id("1011").source(XContentType.JSON,
"name","lisi","age",22,"sex","女"));
request.add(new IndexRequest().index("user").id("1012").source(XContentType.JSON,
"name","wangwu","age",26,"sex","女"));
request.add(new IndexRequest().index("user").id("1013").source(XContentType.JSON,
"name","zhaoliu","age",27,"sex","女"));
esclient.bulk(request, RequestOptions.DEFAULT);
///关闭连接
esclient.close();
}
索引下的批量删除数据 EsTest_Client_Doc_delete_bash
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest().index("user").id("1010"));
request.add(new DeleteRequest().index("user").id("1011"));
request.add(new DeleteRequest().index("user").id("1012"));
request.add(new DeleteRequest().index("user").id("1013"));
esclient.bulk(request, RequestOptions.DEFAULT);
///关闭连接
esclient.close();
}
条件查询之全部查询 EsTest_Client_Query
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
//查询所有的数据
searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
// System.out.println(search);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
///关闭连接
esclient.close();
}
条件查询之匹配查询 EsTest_Client_termQuery
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest req = new SearchRequest();
req.indices("user");
req.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age",27)));
SearchResponse search = esclient.search(req, RequestOptions.DEFAULT);
///关闭连接
esclient.close();
SearchHits hits = search.getHits();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
}
条件查询之分页查询 EsTest_Client_From_Size
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
query.from(0);//当前页
query.size(3);//每页条数
searchRequest.indices("user");
searchRequest.source(query);
// searchRequest.
SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
///关闭连接
esclient.close();
}
条件查询之排序 EsTest_Client_From_Size_Sort
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
query.from(0);//当前页
query.size(3);//每页条数
query.sort("age", SortOrder.DESC);
searchRequest.indices("user");
searchRequest.source(query);
// searchRequest.
SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
///关闭连接
esclient.close();
}
条件查询之排除某列 EsTest_Client_Fetch
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
String[] includes={};//包含
String[] excludes={"age"};//排除
query.fetchSource(includes,excludes);
searchRequest.indices("user");
searchRequest.source(query);
// searchRequest.
SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
///关闭连接
esclient.close();
}
组合查询 EsTest_Client_Should
查询男人 年龄30的
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder bool = new BoolQueryBuilder();
bool.must(QueryBuilders.matchQuery("sex","男"));
bool.must(QueryBuilders.matchQuery("age",27));
//组合查询
builder.query(bool);
searchRequest.source(builder);
SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
///关闭连接
SearchHits hits = search.getHits();
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
}
查询不是男人的
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder bool = new BoolQueryBuilder();
bool.must(QueryBuilders.matchQuery("age",27));
bool.mustNot(QueryBuilders.matchQuery("sex","男"));
//组合查询
builder.query(bool);
searchRequest.source(builder);
SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
///关闭连接
SearchHits hits = search.getHits();
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
}
年龄为26或27
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder bool = new BoolQueryBuilder();
// age=27 and sex =男
// bool.must(QueryBuilders.matchQuery("age",27));
// bool.mustNot(QueryBuilders.matchQuery("sex","男"));
//age=26 or age=27
bool.should(QueryBuilders.matchQuery("age",27));
bool.should(QueryBuilders.matchQuery("age",26));
//组合查询
builder.query(bool);
searchRequest.source(builder);
SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
///关闭连接
SearchHits hits = search.getHits();
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
}
年龄大于等于27小于40
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
//年龄大于等于27小于40
RangeQueryBuilder age = QueryBuilders.rangeQuery("age");
age.gte(27);
age.lt(40);
//组合查询
builder.query(age);
searchRequest.source(builder);
SearchResponse search = esclient.search(searchRequest, RequestOptions.DEFAULT);
///关闭连接
SearchHits hits = search.getHits();
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
}
高亮查询 EsTest_Client_GaoLiang
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhaoliu");
//SearchSourceBuilder 带有高亮标签
//记住这里是创建的不是 builder.highlighter 空参弄出来的,不然会报错的
HighlightBuilder highlighter = new HighlightBuilder();
highlighter.preTags("");//前缀
highlighter.postTags("");//后缀
highlighter.field("name");//name属性高亮显示
builder.highlighter(highlighter);
builder.query(termQueryBuilder);
request.source(builder);
SearchResponse search = esclient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
///关闭连接
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
}
聚合查询
求最大值
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
MaxAggregationBuilder field = AggregationBuilders.max("maxAge").field("age");
builder.aggregation(field);
request.source(builder);
SearchResponse search = esclient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
///关闭连接
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
}
分组
public static void main(String[] args) throws IOException {
//创建es客户端对象
RestHighLevelClient esclient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost",9200,"http"))
);
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
TermsAggregationBuilder ageGroup = AggregationBuilders.terms("ageGroup").field("age");
builder.aggregation(ageGroup);
request.source(builder);
SearchResponse search = esclient.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
///关闭连接
esclient.close();
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
}