您的位置 首页 java

ElasticSearch使用Java API调用相关服务

环境:springboot2.3.10 + elasticsearch7.8.0


注意:这里为了方便使用 spring boot项目(避免还要单独引用其它包)

相关依赖

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>org.elasticsearch</groupId>
  <artifactId>elasticsearch</artifactId>
  <version>7.8.0</version><!--$NO-MVN-MAN-VER$-->
</dependency>
<dependency>
  <groupId>org.elasticsearch.client</groupId>
  <artifactId>elasticsearch-rest-high-level-client</artifactId>
  <version>7.8.0</version><!--$NO-MVN-MAN-VER$-->
</dependency>  

索引 操作

高级别的Rest客户端对象

  private   static  RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http"))) ;  

1、创建索引

 public static  void  createIndex(String index) throws  Exception  {
  CreateIndex Request  request = new CreateIndexRequest(index) ;
  CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT) ;
   boolean  ack = response.isAcknowledged() ;
  System.out.println("ack = " + ack) ;
}  

2、查看索引

 public static void viewIndex(String index) throws Exception {
  GetIndexRequest request = new GetIndexRequest(index) ;
  GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT) ;
  System.out.println("aliases: " + response.getAliases() + "n"
    + "mappings: " + response.getMappings() + "n"
    + "settings: " + response.getSettings()) ;
}  

3、删除索引

 public static void deleteIndex(String index) throws Exception {
  DeleteIndexRequest request = new DeleteIndexRequest(index) ;
  AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT) ;
  System.out.println("ack: " + response.isAcknowledged()) ;
}  

文档操作

 private static RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http"))) ;  

1、创建文档

 public static void createDoc(String index, Users users) throws Exception {
  IndexRequest request = new IndexRequest() ;
  // 设置索引及唯一标识
  request.index(index).id("1001") ;
  ObjectMapper objectMapper = new ObjectMapper() ;
  String jsonString = objectMapper.writeValueAsString(users) ;
  // 添加文档数据及数据格式
  request.source(jsonString, XContentType.JSON) ;
  IndexResponse response = client.index(request, RequestOptions.DEFAULT) ;
  System.out.println("_index: " + response.getIndex() + "n"
      + "_id: " + response.getId() + "n"
      + "_result: " + response.getResult()) ;
}  

2、更新文档

 public static void updateDoc(String index, String id) throws Exception {
  UpdateRequest request = new UpdateRequest() ;
  // 配置修改参数
  request.index(index).id(id) ;
  Map<String, Object> source = new HashMap<>() ;
  source.put("sex", "女") ;
  request.doc(source, XContentType.JSON) ;
  UpdateResponse response = client.update(request, RequestOptions.DEFAULT) ;
  System.out.println("_index: " + response.getIndex() + "n"
      + "_id: " + response.getId() + "n"
      + "_result: " + response.getResult()) ;
}  

3、查询文档

 public static void viewDoc(String index, String id) throws Exception {
  GetRequest request = new GetRequest().index(index).id(id) ;
  GetResponse response = client.get(request, RequestOptions.DEFAULT) ;
  System.out.println("_index: " + response.getIndex() + "n"
      + "_type: " + response.getType() + "n"
      + "_id: " + response.getId() + "n"
      + "source: " + response.getSourceAsString()) ;
}  

4、删除文档

 public static void deleteIndex(String index, String id) throws Exception {
  DeleteRequest request = new DeleteRequest().index(index).id(id) ;
  DeleteResponse response = client.delete(request, RequestOptions.DEFAULT) ;
  System.out.println(response.toString()) ;
}  

5、批量操作

 public static void  batch Operator(String index) throws Exception {
  BulkRequest request = new BulkRequest() ;
  request.add(new IndexRequest().index(index).id("1002").source(XContentType.JSON, "name","老六", "sex", "男", "age", 20)) ;
  request.add(new IndexRequest().index(index).id("1003").source(XContentType.JSON, "name","外网", "sex", "女", "age", 10)) ;
  request.add(new IndexRequest().index(index).id("1004").source(XContentType.JSON, "name","莉莉", "sex", "女", "age", 35)) ;
  BulkResponse response = client.bulk(request, RequestOptions.DEFAULT) ;
  System.out.println("took: " + response.getTook() + "n"
      + "items: " + new ObjectMapper().writeValueAsString(response.getItems())) ;
}  

6、高级查询

 public static void highSearch(String index) throws Exception {
  SearchRequest request = new SearchRequest().indices(index) ;
  SearchSourceBuilder builder = new SearchSourceBuilder() ;
  builder.query(QueryBuilders.matchAllQuery()) ;
  request.source(builder) ;
  SearchResponse response = client.search(request, RequestOptions.DEFAULT) ;
  SearchHits hits = response.getHits() ;
  System.out.println("took: " + response.getTook() + "n"
      + "timeout: " + response.isTimedOut() + "n"
      + "total: " + hits.getTotalHits() + "n"
      + "MaxScore: " + hits.getMaxScore()) ;
  for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString()) ;
  }
}  

7、term精确查询

 public static void highTermSearch(String index) throws Exception {
  SearchRequest request = new SearchRequest().indices(index) ;
  SearchSourceBuilder builder = new SearchSourceBuilder() ;
  builder.query(QueryBuilders.termQuery("age", "20")) ;
  request.source(builder) ;
  SearchResponse response = client.search(request, RequestOptions.DEFAULT) ;
  SearchHits hits = response.getHits() ;
  System.out.println("took: " + response.getTook() + "n"
      + "timeout: " + response.isTimedOut() + "n"
      + "total: " + hits.getTotalHits() + "n"
      + "MaxScore: " + hits.getMaxScore()) ;
  for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString()) ;
  }
}  

8、分页查询

 public static void highPagingSearch(String index) throws Exception {
  SearchRequest request = new SearchRequest().indices(index) ;
  SearchSourceBuilder builder = new SearchSourceBuilder() ;
  builder.query(QueryBuilders.matchAllQuery()) ;
  builder.from(1) ;
  builder.size(2) ;
  request.source(builder) ;
  SearchResponse response = client.search(request, RequestOptions.DEFAULT) ;
  SearchHits hits = response.getHits() ;
  System.out.println("took: " + response.getTook() + "n"
      + "timeout: " + response.isTimedOut() + "n"
      + "total: " + hits.getTotalHits() + "n"
      + "MaxScore: " + hits.getMaxScore()) ;
  for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString()) ;
  }
}  

9、分页&排序查询

 public static void highPagingAndSortSearch(String index) throws Exception {
  SearchRequest request = new SearchRequest().indices(index) ;
  SearchSourceBuilder builder = new SearchSourceBuilder() ;
  builder.query(QueryBuilders.matchAllQuery()) ;
  builder.from(0) ;
  builder.size(20) ;
  builder. Sort ("age", SortOrder.ASC) ;
  request.source(builder) ;
  SearchResponse response = client.search(request, RequestOptions.DEFAULT) ;
  SearchHits hits = response.getHits() ;
  System.out.println("took: " + response.getTook() + "n"
      + "timeout: " + response.isTimedOut() + "n"
      + "total: " + hits.getTotalHits() + "n"
      + "MaxScore: " + hits.getMaxScore()) ;
  for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString()) ;
  }
}  

9、分页&排序&过滤字段查询

 public static void highPagingAndSortAnd Filter FieldSearch(String index) throws Exception {
  SearchRequest request = new SearchRequest().indices(index) ;
  SearchSourceBuilder builder = new SearchSourceBuilder() ;
  builder.query(QueryBuilders.matchAllQuery()) ;
  builder.from(0) ;
  builder.size(20) ;
  builder.sort("age", SortOrder.ASC) ;
  String[] includes = {"name"} ;
  String[] excludes = {} ;
  builder.fetchSource(includes, excludes) ;
  request.source(builder) ;
  SearchResponse response = client.search(request, RequestOptions.DEFAULT) ;
  SearchHits hits = response.getHits() ;
  System.out.println("took: " + response.getTook() + "n"
      + "timeout: " + response.isTimedOut() + "n"
      + "total: " + hits.getTotalHits() + "n"
      + "MaxScore: " + hits.getMaxScore()) ;
  for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString()) ;
  }
}  

10、范围查询

 public static void highBoolSearch(String index) throws Exception {
  SearchRequest request = new SearchRequest().indices(index) ;
  SearchSourceBuilder builder = new SearchSourceBuilder() ;
  builder.query(QueryBuilders.matchAllQuery()) ;
  builder.from(0) ;
  builder.size(20) ;
  builder.sort("age", SortOrder.ASC) ;
  RangeQueryBuilder rangeBuilder = QueryBuilders.rangeQuery("age");
  rangeBuilder.gte(15) ;
  rangeBuilder.lte(30) ;
  builder.query(rangeBuilder) ;
  request.source(builder) ;
  SearchResponse response = client.search(request, RequestOptions.DEFAULT) ;
  SearchHits hits = response.getHits() ;
  System.out.println("took: " + response.getTook() + "n"
      + "timeout: " + response.isTimedOut() + "n"
      + "total: " + hits.getTotalHits() + "n"
      + "MaxScore: " + hits.getMaxScore()) ;
  for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString()) ;
  }
}  

11、高亮查询

 public static void highHighLightSearch(String index) throws Exception {
  SearchRequest request = new SearchRequest().indices(index) ;
  SearchSourceBuilder builder = new SearchSourceBuilder() ;
  builder.query(QueryBuilders.matchQuery("name", "莉莉")) ;
  HighlightBuilder highLightBuilder = new HighlightBuilder() ;
  highLightBuilder.preTags("<font color='red'>") ;
  highLightBuilder.postTags("</font>") ;
  highLightBuilder.field("name") ;
  builder.highlighter(highLightBuilder) ;
  request.source(builder) ;
  SearchResponse response = client.search(request, RequestOptions.DEFAULT) ;
  SearchHits hits = response.getHits() ;
  System.out.println("took: " + response.getTook() + "n"
      + "timeout: " + response.isTimedOut() + "n"
      + "total: " + hits.getTotalHits() + "n"
      + "MaxScore: " + hits.getMaxScore()) ;
  for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString() + "n"
        + "highlight: " + hit.getHighlightFields()) ;
  }
}  

12、聚合查询

 public static void highAggsSearch(String index) throws Exception {
  SearchRequest request = new SearchRequest().indices(index) ;
  SearchSourceBuilder builder = new SearchSourceBuilder() ;
  builder.aggregation(AggregationBuilders.avg("avg_age").field("age")) ;
  request.source(builder) ;
  SearchResponse response = client.search(request, RequestOptions.DEFAULT) ;
  SearchHits hits = response.getHits() ;
  System.out.println("took: " + response.getTook() + "n"
      + "timeout: " + response.isTimedOut() + "n"
      + "total: " + hits.getTotalHits() + "n"
      + "MaxScore: " + hits.getMaxScore()) ;
  for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString())  ;
  }
  System.out.println(((ParsedAvg)response.getAggregations().iterator().next()).getValue()) ;
}  

13、分组统计

 public static void highGroupSearch(String index) throws Exception {
  SearchRequest request = new SearchRequest().indices(index) ;
  SearchSourceBuilder builder = new SearchSourceBuilder() ;
  builder.aggregation(AggregationBuilders.terms("age_groupby").field("age")) ;
  request.source(builder) ;
  SearchResponse response = client.search(request, RequestOptions.DEFAULT) ;
  SearchHits hits = response.getHits() ;
  System.out.println("took: " + response.getTook() + "n"
      + "timeout: " + response.isTimedOut() + "n"
      + "total: " + hits.getTotalHits() + "n"
      + "MaxScore: " + hits.getMaxScore()) ;
  for (SearchHit hit : hits) {
    System.out.println(hit.getSourceAsString()) ;
  }
  System.out.println(response) ;
}  

完毕!!!

给个 关注+转发 呗谢谢

文章来源:智云一二三科技

文章标题:ElasticSearch使用Java API调用相关服务

文章地址:https://www.zhihuclub.com/198557.shtml

关于作者: 智云科技

热门文章

网站地图