public class util {
void addIndex() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
CreateIndexRequest request = new CreateIndexRequest("user");
String aliaseStr = "{\"user.aliases\":{}}";
Map aliases = JSONObject.parseObject(aliaseStr, Map.class);
String mappingStr = "{\"properties\":{\"name\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\"}}},\"sex\":{\"type\":\"keyword\"},\"age\":{\"type\":\"integer\"}}}";
Map mappings = JSONObject.parseObject(mappingStr, Map.class);
String settingStr = "{\"index\":{\"number_of_shards\":\"9\",\"number_of_replicas\":\"2\"}}";
Map settings = JSONObject.parseObject(settingStr, Map.class);
request.aliases(aliases);
request.mapping(mappings);
request.settings(settings);
CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println("添加索引是否成功:" + response.isAcknowledged());
client.close();
}
void getIndexInfo() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
GetIndexRequest request = new GetIndexRequest("user");
GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
System.out.println("aliases:" + response.getAliases());
System.out.println("mappings:" + response.getMappings());
System.out.println("settings:" + response.getSettings());
client.close();
}
void deleteIndex() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
DeleteIndexRequest request = new DeleteIndexRequest("user");
AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println("删除是否成功:" + response.isAcknowledged());
client.close();
}
void insertDataToIndex() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
User user = new User();
user.setName("张三");
user.setSex("男");
user.setAge(22);
IndexRequest request = new IndexRequest("user");
request.id("1000");
request.source(JSONObject.toJSONString(user), XContentType.JSON);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
System.out.println("数据插入结果:" + response.getResult());
client.close();
}
void updateDataFromIndex() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
User user = new User();
user.setName("小美");
user.setAge(20);
UpdateRequest request = new UpdateRequest();
request.index("user").id("1000");
request.doc(JSONObject.toJSONString(user), XContentType.JSON);
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
System.out.println("数据更新结果:" + response.getResult());
client.close();
}
void getDataById() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
GetRequest request = new GetRequest("user");
request.id("1000");
GetResponse response = client.get(request, RequestOptions.DEFAULT);
System.out.println("查询结果:" + response.getSourceAsString());
client.close();
}
void deleteDataById() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
DeleteRequest request = new DeleteRequest("user");
request.id("1000");
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
System.out.println("删除是否成功:" + response.getResult());
client.close();
}
void deleteDataByQuery() throws IOException {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
DeleteByQueryRequest request = new DeleteByQueryRequest("user");
request.setQuery(QueryBuilders.matchAllQuery());
BulkByScrollResponse response = client.deleteByQuery(request, RequestOptions.DEFAULT);
System.out.println("删除失败结果:" + response.getBulkFailures());
client.close();
}
void batchInsertDataToIndex() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
List<User> userList = new ArrayList<>(10);
for (int i = 0; i < 10; i++) {
User user = new User();
user.setName(i % 2 == 0 ? "张三" + i : "小美" + i);
user.setSex(i % 2 == 0 ? "男" : "女");
user.setAge(22 + i);
userList.add(user);
}
BulkRequest bulkRequest = new BulkRequest();
userList.forEach(user -> {
IndexRequest request = new IndexRequest("user");
request.id("10000" + user.getAge());
request.source(JSONObject.toJSONString(user), XContentType.JSON);
bulkRequest.add(request);
});
BulkResponse response = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println("批量插入是否失败:" + response.hasFailures());
for (BulkItemResponse itemResponse : response) {
BulkItemResponse.Failure failure = itemResponse.getFailure();
if (failure == null) {
System.out.println("插入成功的文档id:" + itemResponse.getId());
} else {
System.out.println("插入失败的文档id:" + itemResponse.getId());
}
}
client.close();
}
void batchDeleteDataFromIndex() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
List<User> userList = new ArrayList<>(10);
for (int i = 0; i < 10; i++) {
User user = new User();
user.setName(i % 2 == 0 ? "张三" + i : "小美" + i);
user.setSex(i % 2 == 0 ? "男" : "女");
user.setAge(22 + i);
userList.add(user);
}
BulkRequest bulkRequest = new BulkRequest();
userList.forEach(user -> {
DeleteRequest request = new DeleteRequest("user");
request.id("10000" + user.getAge());
bulkRequest.add(request);
});
BulkResponse response = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println("批量删除是否失败:" + response.hasFailures());
for (BulkItemResponse itemResponse : response) {
BulkItemResponse.Failure failure = itemResponse.getFailure();
if (failure == null) {
System.out.println("删除成功的文档id:" + itemResponse.getId());
} else {
System.out.println("删除失败的文档id:" + itemResponse.getId());
}
}
client.close();
}
void advancedQueryFromAllData() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchAllQuery());
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
User user = JSONObject.parseObject(hit.getSourceAsString(), User.class);
System.out.println("姓名:" + user.getName() + ";性别:" + user.getSex() + ";年龄:" + user.getAge());
}
client.close();
}
void advancedQueryByTerm() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.termQuery("sex", "男"));
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
User user = JSONObject.parseObject(hit.getSourceAsString(), User.class);
System.out.println("姓名:" + user.getName() + ";性别:" + user.getSex() + ";年龄:" + user.getAge());
}
client.close();
}
void advancedQueryByPage() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchAllQuery());
int currentPage = 1;
int pageSize = 5;
int from = (currentPage - 1) * pageSize;
builder.from(from);
builder.size(pageSize);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
User user = JSONObject.parseObject(hit.getSourceAsString(), User.class);
System.out.println("姓名:" + user.getName() + ";性别:" + user.getSex() + ";年龄:" + user.getAge());
}
client.close();
}
void advancedQueryBySort() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchAllQuery());
builder.sort("age", SortOrder.DESC);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
User user = JSONObject.parseObject(hit.getSourceAsString(), User.class);
System.out.println("姓名:" + user.getName() + ";性别:" + user.getSex() + ";年龄:" + user.getAge());
}
client.close();
}
void advancedQueryBySource() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchAllQuery());
String[] includes = {"name", "age"};
String[] excludes = {};
builder.fetchSource(includes, excludes);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
User user = JSONObject.parseObject(hit.getSourceAsString(), User.class);
System.out.println("姓名:" + user.getName() + ";性别:" + user.getSex() + ";年龄:" + user.getAge());
}
client.close();
}
void advancedQueryByShould() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(QueryBuilders.matchQuery("age", 30));
boolQueryBuilder.should(QueryBuilders.matchQuery("sex", "女").boost(10));
builder.query(boolQueryBuilder);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
User user = JSONObject.parseObject(hit.getSourceAsString(), User.class);
System.out.println("姓名:" + user.getName() + ";性别:" + user.getSex() + ";年龄:" + user.getAge());
}
client.close();
}
void advancedQueryByFilter() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.filter(QueryBuilders.rangeQuery("age").gte(26).lte(29));
builder.query(boolQueryBuilder);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
User user = JSONObject.parseObject(hit.getSourceAsString(), User.class);
System.out.println("姓名:" + user.getName() + ";性别:" + user.getSex() + ";年龄:" + user.getAge());
}
client.close();
}
void advancedQueryByLike() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.fuzzyQuery("name.keyword", "张三").fuzziness(Fuzziness.ONE));
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
User user = JSONObject.parseObject(hit.getSourceAsString(), User.class);
System.out.println("姓名:" + user.getName() + ";性别:" + user.getSex() + ";年龄:" + user.getAge());
}
client.close();
}
void advancedQueryByHighLight() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchPhraseQuery("name", "张三"));
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("<b style='color:red'>");
highlightBuilder.postTags("</b>");
highlightBuilder.field("name");
builder.highlighter(highlightBuilder);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHit[] hits = response.getHits().getHits();
for (SearchHit hit : hits) {
Map<String, HighlightField> map = hit.getHighlightFields();
HighlightField highlightField = map.get("name");
System.out.println("高亮名称:" + highlightField.getFragments()[0].string());
}
client.close();
}
void advancedQueryByMaxValueAggregation() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
AggregationBuilder aggregationBuilder = AggregationBuilders.max("maxAge").field("age");
builder.aggregation(aggregationBuilder);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
Aggregations aggregations = response.getAggregations();
ParsedMax maxAge = aggregations.get("maxAge");
System.out.println("最大年龄:" + maxAge.getValue());
client.close();
}
void advancedQueryByGroupAggregation() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
AggregationBuilder aggregationBuilder = AggregationBuilders.terms("termsSex").field("sex.keyword");
builder.aggregation(aggregationBuilder);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
Aggregations aggregations = response.getAggregations();
ParsedStringTerms termsSex = aggregations.get("termsSex");
for (Terms.Bucket bucket : termsSex.getBuckets()) {
System.out.println("性别:" + bucket.getKeyAsString() + ";数量:" + bucket.getDocCount());
}
client.close();
}
void scrollQuery() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
int totalPage = 10;
int size = 20;
SearchRequest searchRequest = new SearchRequest("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
searchRequest.source(builder.query(QueryBuilders.matchAllQuery()).size(size));
String scrollId = null;
SearchResponse scrollResponce = null;
Scroll scroll = new Scroll(TimeValue.timeValueMinutes(2));
List<String> scrollIds = new ArrayList<>();
for (int i = 0; i < totalPage; i++) {
try {
if (i == 0) {
searchRequest.scroll(scroll);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
scrollId = response.getScrollId();
scrollIds.add(scrollId);
}
else {
SearchScrollRequest searchScrollRequest = new SearchScrollRequest(scrollId);
searchScrollRequest.scroll(scroll);
scrollResponce = client.scroll(searchScrollRequest, RequestOptions.DEFAULT);
scrollId = scrollResponce.getScrollId();
scrollIds.add(scrollId);
}
} catch (Exception e) {
e.printStackTrace();
}
}
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.scrollIds(scrollIds);
try {
client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
System.out.println("清除滚动查询游标id失败");
e.printStackTrace();
}
System.out.println("滚动查询返回数据:" + scrollResponce);
client.close();
}
void multiQueryById() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
MultiGetRequest request = new MultiGetRequest();
request.add("user", "1000");
request.add("user", "2000");
MultiGetResponse response = client.mget(request, RequestOptions.DEFAULT);
List<String> existIdList = new ArrayList<>();
for (MultiGetItemResponse itemResponse : response) {
MultiGetResponse.Failure failure = itemResponse.getFailure();
GetResponse getResponse = itemResponse.getResponse();
if (failure == null) {
boolean exists = getResponse.isExists();
String id = getResponse.getId();
if (exists) {
existIdList.add(id);
}
} else {
failure.getFailure().printStackTrace();
}
}
System.out.println("数据存在于ES的文档id:" + existIdList);
client.close();
}
void printClusterNameAndStatus() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
ClusterHealthRequest request = new ClusterHealthRequest();
ClusterHealthResponse response = client.cluster().health(request, RequestOptions.DEFAULT);
ClusterHealthStatus status = response.getStatus();
System.out.println("集群名称:" + response.getClusterName());
System.out.println("集群健康状态:" + status.name());
client.close();
}
void printIndexInfo() throws Exception {
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
Response response = client.getLowLevelClient().performRequest(new Request("GET", "/_cat/indices"));
HttpEntity entity = response.getEntity();
String responseStr = EntityUtils.toString(entity, StandardCharsets.UTF_8);
String[] indexInfoArr = responseStr.split("\n");
for (String indexInfo : indexInfoArr) {
String[] infoArr = indexInfo.split("\\s+");
String status = infoArr[0];
String open = infoArr[1];
String name = infoArr[2];
String id = infoArr[3];
String mainShardNum = infoArr[4];
String viceShardNum = infoArr[5];
String docNum = infoArr[6];
String deletedDocNum = infoArr[7];
String allShardSize = infoArr[8];
String mainShardSize = infoArr[9];
System.out.println("》》》》》》》》索引信息》》》》》》》》");
System.out.println("名称:" + name);
System.out.println("id:" + id);
System.out.println("状态:" + status);
System.out.println("是否开放:" + open);
System.out.println("主分片数量:" + mainShardNum);
System.out.println("副本分片数量:" + viceShardNum);
System.out.println("Lucene文档数量:" + docNum);
System.out.println("被删除文档数量:" + deletedDocNum);
System.out.println("所有分片大小:" + allShardSize);
System.out.println("主分片大小:" + mainShardSize);
}
client.close();
}
}