package com.dp.elasticsearch;
import com.dp.mybatis.pojo.User;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.IOException;
import java.util.ArrayList;
@SpringBootTest
public class EsText {
private static RestHighLevelClient esClient;
static {
esClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("10.121.104.190", 9200, "http")));
}
@Test //创建索引
public void ESTestIndexCreate() throws IOException {
CreateIndexRequest request = new CreateIndexRequest("user");
CreateIndexResponse response = esClient.indices().create(request, RequestOptions.DEFAULT);
System.out.println(response.isAcknowledged()); //true
esClient.close();
}
@Test //查询索引
public void ESTestIndexSearch() throws IOException {
GetIndexRequest request = new GetIndexRequest("user");
GetIndexResponse response = esClient.indices().get(request, RequestOptions.DEFAULT);
System.out.println("======");
System.out.println(response.getAliases()); //{test=[]}
System.out.println(response.getMappings()); //{test=org.elasticsearch.cluster.metadata.MappingMetaData@e99b5c5d}
System.out.println(response.getIndices()); //[Ljava.lang.String;@503f91c3
System.out.println(response.getDefaultSettings()); //{}
System.out.println(response.getSettings()); //{test={"index.creation_date":"1637564349484","index.number_of_replicas":"1","index.number_of_shards":"5","index.provided_name":"test","index.uuid":"SNoFaMfGSEiX_0KBj8JYqQ","index.version.created":"6080099"}}
esClient.close();
}
@Test //删除索引
public void ESTestIndexDelete() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("user");
AcknowledgedResponse response = esClient.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(response.isAcknowledged()); //true
esClient.close();
}
//============================上面的是索引操作,下面是文档操作===============================
@Test //添加文档 我目前使用的es6.8.0的,还需要type,es7以后的就可以不用type了,我目前还需要用...
public void ESTestDocInsert() throws IOException {
IndexRequest request = new IndexRequest();
request.index("user").type("_doc").id("1");
User user = new User();
user.setId((long) 1);
user.setName("张三");
user.setAge(23);
String userJson = new ObjectMapper().writeValueAsString(user);
request.source(userJson, XContentType.JSON);
IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);
System.out.println(response.getResult()); //CREATED
System.out.println(response.getId()); //1
System.out.println(response.getShardInfo()); //ShardInfo{total=2, successful=1, failures=[]}
esClient.close();
}
@Test //查询文档 其中的email是操作数据库的类,不想新建了,就用这个了,不用在意。如果实在很在意,可以将类中的email删除,或者在email类中放置该注解@JsonIgnore
public void ESTestDocSearch() throws IOException {
GetRequest request = new GetRequest();
request.index("user").type("_doc").id("1");
GetResponse response = esClient.get(request, RequestOptions.DEFAULT);
System.out.println(response.getSource()); //{name=张三, id=1, age=23, email=null}
esClient.close();
}
@Test //更新操作
public void ESTestDocUpdate() throws IOException {
UpdateRequest request = new UpdateRequest();
request.index("user").type("_doc").id("1");
request.doc(XContentType.JSON, "age", 34, "name", "李四");
UpdateResponse response = esClient.update(request, RequestOptions.DEFAULT);
System.out.println(response.status()); //Ok
esClient.close();
}
@Test //删除文档
public void ESTestDocDelete() throws IOException {
DeleteRequest request = new DeleteRequest();
request.index("user").type("_doc").id("1");
DeleteResponse response = esClient.delete(request, RequestOptions.DEFAULT);
System.out.println(response.status()); //OK
esClient.close();
}
//============================上面是文档操作,下面是批量操作(多文档操作)===============================
@Test //批量新增文档
public void ESTestDocInsertBatch() throws IOException {
BulkRequest request = new BulkRequest();
ArrayList<User> list = new ArrayList<>();
list.add(new User((long) 1, "张三", 23));
list.add(new User((long) 2, "李四", 24));
list.add(new User((long) 3, "王五", 25));
list.add(new User((long) 4, "赵六", 26));
list.add(new User((long) 5, "周七", 27));
for (int i = 1; i <= list.size(); i++) {
IndexRequest source = new IndexRequest().index("user").type("_doc").id(i + "").source(new ObjectMapper().writeValueAsString(list.get(i - 1)), XContentType.JSON);
request.add(source);
}
BulkResponse responses = esClient.bulk(request, RequestOptions.DEFAULT);
System.out.println(responses.getTook()); //15ms
esClient.close();
}
@Test //批量操作文档
public void ESTestDocDeleteBatch() throws IOException {
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest().index("user").type("_doc").id("1"));
request.add(new DeleteRequest().index("user").type("_doc").id("2"));
request.add(new DeleteRequest().index("user").type("_doc").id("3"));
BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
System.out.println(response.getTook()); //6ms
esClient.close();
}
//============================上面是批量操作(多文档操作),下面是复杂查询操作===============================
@Test //查询user索引下的所有数据
public void ESTestDocQuery() throws IOException {
SearchRequest request = new SearchRequest();
request.indices("user");
request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.getHits().getTotalHits());
for (SearchHit hit : response.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
esClient.close();
}
@Test //做匹配查询 根据年龄查询数据
public void ESTestDocQueryByCondition() throws IOException {
SearchRequest request = new SearchRequest();
request.indices("user");
request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age", 23)));
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.getHits()); //org.elasticsearch.search.SearchHits@3d65eee0
System.out.println(response.getTook()); //3ms
for (SearchHit hit : response.getHits()) {
System.out.println(hit.getSourceAsMap()); //{name=张三, id=1, age=23, email=null}
}
esClient.close();
}
@Test //分页查询,查看第几页(页码-1)*每页条数
public void ESTestDocQueryByPage() throws IOException {
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
builder.from(0);
builder.size(2);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.getHits().getTotalHits()); //5
System.out.println(response.getTook()); //2ms
for (SearchHit hit : response.getHits()) {
System.out.println(hit.getSourceAsMap()); //{name=周七, id=5, age=27, email=null} {name=李四, id=2, age=24, email=null}
}
esClient.close();
}
@Test //排序查询
public void ESTestDocQueryBySort() throws IOException {
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
builder.sort("age", SortOrder.DESC);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.getHits().getTotalHits()); //5
System.out.println(response.getTook()); //8ms
for (SearchHit hit : response.getHits()) {
System.out.println(hit.getSourceAsMap());
}
/**
* {name=周七, id=5, age=27, email=null}
* {name=赵六, id=4, age=26, email=null}
* {name=王五, id=3, age=25, email=null}
* {name=李四, id=2, age=24, email=null}
* {name=张三, id=1, age=23, email=null}
*/
esClient.close();
}
@Test //过滤字段查询
public void ESTestDocQueryByFilter() throws IOException {
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
String[] excludes = {"email","id"};
String[] includes={};
builder.fetchSource(includes,excludes);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.getHits().getTotalHits()); //5
System.out.println(response.getTook()); //2ms
for (SearchHit hit : response.getHits()) {
System.out.println(hit.getSourceAsMap());
/**
* {name=周七, age=27}
* {name=李四, age=24}
* {name=赵六, age=26}
* {name=张三, age=23}
* {name=王五, age=25}
*/
}
esClient.close();
}
@Test //组合查询
public void ESTestDocQueryByCombination() throws IOException {
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(QueryBuilders.matchQuery("age",24));
boolQueryBuilder.should(QueryBuilders.matchQuery("name","张三"));
builder.query(boolQueryBuilder);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.getHits().getTotalHits()); //2
System.out.println(response.getTook()); //3ms
for (SearchHit hit : response.getHits()) {
System.out.println(hit.getSourceAsMap());
/**
* {name=李四, id=2, age=24, email=null}
* {name=张三, id=1, age=23, email=null}
*/
}
esClient.close();
}
@Test //范围查询
public void ESTestDocQueryByRange() throws IOException {
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age");
rangeQueryBuilder.gte(23);
rangeQueryBuilder.lt(26);
builder.query(rangeQueryBuilder);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.getHits().getTotalHits()); //3
System.out.println(response.getTook()); //2ms
for (SearchHit hit : response.getHits()) {
System.out.println(hit.getSourceAsMap());
/**
* {name=李四, id=2, age=24, email=null}
* {name=张三, id=1, age=23, email=null}
* {name=王五, id=3, age=25, email=null}
*/
}
esClient.close();
}
@Test //模糊查询
public void ESTestDocQueryByVague() throws IOException {
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.fuzzyQuery("name","小张").fuzziness(Fuzziness.ONE));
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
System.out.println(response.getHits().getTotalHits()); //1
System.out.println(response.getTook()); //50ms
for (SearchHit hit : response.getHits()) {
System.out.println(hit.getSourceAsMap());
//{name=张三, id=1, age=23, email=null}
}
esClient.close();
}
}
java操作ES的操作
于 2021-11-23 10:44:07 首次发布