1、新增文档
/**
* 新增文档
*/
@Test
public void insert() throws IOException {
XContentBuilder contentBuilder= XContentFactory.jsonBuilder()
.startObject()
.field("id","3")
.field("name","admin")
.field("age",30)
.field("nickname","admin")
.field("brithday","2023-10-01")
.field("remark","菜鸟成长记")
.endObject();
IndexResponse indexResponse = client.prepareIndex("s2", "user", "3")
.setSource(contentBuilder)
.get();
System.out.println(indexResponse.status());
}
2、获取文档
/**
* 根据id查看文档
*/
@Test
public void getById() {
GetResponse response = client.prepareGet("s2", "user", "3").get();
System.out.println(response.getSourceAsMap());
}
//批量查询 multiGet
@Test
public void multiGet() throws IOException, ExecutionException, InterruptedException {
MultiGetRequest request = new MultiGetRequest();
request.add("s2", "user", "2");
request.add("s2", "user", "3");
MultiGetResponse multiGetItemResponses = client.multiGet(request).get();
for (MultiGetItemResponse response : multiGetItemResponses) {
System.out.println("查询内容:" + response.getResponse().getSourceAsMap());
}
}
@Test
public void query() {
//match_all 查询所有
MatchAllQueryBuilder matchAllQuery = QueryBuilders.matchAllQuery();
//match 查询
MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("name", "lisi");
//mutilMatch 查询
MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery("周星驰影帝", "name", "nickname");
//termQuery查询
QueryBuilder termQuery = QueryBuilders.termQuery("name", "lisi1");
//termsQuery查询
TermsQueryBuilder termsQuery = QueryBuilders.termsQuery("name", "周星驰", "影帝");
//范围查询
QueryBuilder rangeQuery = QueryBuilders.rangeQuery("age").from(18).to(100);
//通配符查询 * 零个或多个
QueryBuilder wildcardQuery = QueryBuilders.wildcardQuery("name","周*");
//前缀查询
QueryBuilder prefixQuery = QueryBuilders.prefixQuery("author","周");
//模糊查询 查询类型的
QueryBuilder fuzzyQuery = QueryBuilders.fuzzyQuery("name","ad");
//id查询
QueryBuilder idsQuery = QueryBuilders.idsQuery().addIds("1","2","4");
// + 代表必须有 -代表没有
QueryBuilder queryString = QueryBuilders.queryStringQuery("+周星驰 -sss");
//组合查询
QueryBuilder boolQuery = QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("author", "周星驰"))
.mustNot(QueryBuilders.matchQuery("title", "梁朝伟"))
.should(QueryBuilders.matchQuery("title", "影帝"))
.filter(QueryBuilders.rangeQuery("id").gte("1"));
//查询
SearchRequestBuilder index3 = client.prepareSearch("s2")
.setQuery(matchAllQuery)
.setSize(5);
//获取响应
SearchResponse searchResponse = index3.get();
//获取数据
SearchHits hits = searchResponse.getHits();
//打印数据
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsMap());
}
}
//聚合查询
@Test
public void test(){
AggregationBuilder aggregationBuilder= AggregationBuilders.max("max").field("age");
SearchResponse index3 = client.prepareSearch("s2").addAggregation(aggregationBuilder).get();
Max max = index3.getAggregations().get("max");
System.out.println("最大年龄:" + max.getValue());
}
3、修改文档
@Test
public void update() throws IOException, ExecutionException, InterruptedException {
UpdateRequest updateRequest = new UpdateRequest();
//内容构建
XContentBuilder contentBuilder=XContentFactory.jsonBuilder()
.startObject()
.field("name","admin3")
.endObject();
//修改请求
updateRequest.index("s2")
.type("user")
.id("3")
.doc(contentBuilder);
UpdateResponse updateResponse = client.update(updateRequest).get();
System.out.println("修改结果:" + updateResponse.status()); //修改结果:OK
}
4、删除文档
/**
* 根据ID删除
*/
@Test
public void deleteById() {
DeleteResponse response = client.prepareDelete("s2", "user", "3").get();
System.out.println(response.status());
}
/**
* 通过查询条件删除
*/
@Test
public void deleteByCondition() {
BulkByScrollResponse response = DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
.filter(QueryBuilders.termQuery("a", "1")) //查询条件
.source("s2") //索引名
.get();//执行
System.out.println("删除文档的数量:" + response.getDeleted());
}
/**
* 通过查询条件删除 异步带回调函数
*/
@Test
public void deleteByConditionWithCallback() {
DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
.filter(QueryBuilders.termQuery("a", "1")) //查询条件
.source("s2")
.execute(new ActionListener<BulkByScrollResponse>() {
@Override
public void onResponse(BulkByScrollResponse response) {
System.out.println("删除文档的数量:" + response.getDeleted());
}
@Override
public void onFailure(Exception e) {
}
});
}