【自学elasticsearch7】结合es语法和java的HighLevelClient:查询时es的curl操作命令和client构造对照

【自学elasticsearch7】结合es语法和java的HighLevelClient:查询时es的curl操作命令和client构造对照

)

能否用java代码构建出复杂的es查询语句理解es的curl查询命令与HighLevelClient的关系至关重要!!!

用一个例子来对照这两者的关系,es的curl操作命令可以分为两部分:一是http请求头部分,二是请求体部分

GET /firstmapping/_search
{
  "query": {
    "match": {
      "content": "华强"
    }
  }, 
  "from": 0,
  "size": 5, 
  "sort": [
    {
      "score": {
        "order": "desc"
      }
    }
  ], 
  "track_total_hits": true,
  "highlight": {
    "fields": {
      "title": {}
    }
  }
}

查询命令的请求头组成:GET + 索引名 + _search

请求体:列举了以上几个比较常用的

  • query :查询条件构建
  • from 和 size 用来进行分页查询(当不填写size参数时,默认只查出10条)
  • sort:构建排序
  • track_total_hits :是否开启全部查询(若不开启当文档总数超过10000时,查询结果返回的总条数为10000)
  • highlight:高亮查询

而在用HighLevelClient构建查询时则需要分为三部分:

第一步,构建请求(即对应curl的请求头部分):常用的类包括 org.elasticsearch.action.search.SearchRequest、org.elasticsearch.client.indices.GetIndexRequest等

第二步,构建查询参数(对应curl的from、size、sort、highlight等参数配置):用到的类是org.elasticsearch.search.builder.SearchSourceBuilder

第三步,构建查询请求(对应curl的query部分),主要类为QueryBuilders,可以构建各种查询,包括BoolQuery、MatchQuery、TermQuery等,构建完成后填入第二步的SearchSourceBuilder中searchSourceBuilder.query(builder);

了解了这三个步骤,就可以对应的将开头的curl命令用java代码表示出来:

    public void searchTest(){
        SearchRequest searchRequest = new SearchRequest("firstmapping");//构建请求头
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//构建请求体
        MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("content", "华强"); //构建查询参数
        HighlightBuilder highlightBuilder = new HighlightBuilder(); //构建高亮显示
        highlightBuilder.field("content");

        searchSourceBuilder.query(queryBuilder);//将查询条件赋给请求体
        searchSourceBuilder.trackTotalHits(true);
        searchSourceBuilder.from(0);
        searchSourceBuilder.size(5);
        searchSourceBuilder.sort("score",SortOrder.DESC);
        searchSourceBuilder.highlighter(highlightBuilder); //将高亮显示赋给请求体
        
        searchRequest.source(searchSourceBuilder);//将请求体赋给请求头
        SearchResponse searchResponse = null;
        try{
            searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        }catch (Exception e){
            e.printStackTrace();
        }
        /*
         * 接下来即可从searchResponse中获取查询结果
         */
        SearchHit[] hits = searchResponse.getHits().getHits();
        for (SearchHit hit : hits) {
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            System.out.println(sourceAsMap);
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值