【ES的操作】

es的一些操作:

1.es的一些操作

@Autowired.
private RestHighLevelClient restHighLevelClient.

删除一条索引下的所有数据

    DeleteByQueryRequest deleteByQueryRequest =
                                    new DeleteByQueryRequest();
    deleteByQueryRequest.setRefresh(true);
    BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
    //指定存在该索引下的字段
    boolQueryBuilder.must(QueryBuilders.existsQuery("home"));
    deleteByQueryRequest.setQuery(boolQueryBuilder);
    //索引
    deleteByQueryRequest.indices("hangzhou_hongwuyue_801");
    deleteByQueryRequest.types(EsDicIndexUtil.FULL_TEXT);
    restHighLevelClient.deleteByQuery(deleteByQueryRequest,
    RequestOptions.DEFAULT);

查询一条索引下的所有/部分数据

//创建Request
 SearchRequest searchRequest = new SearchRequest();
 searchRequest.types(EsDicIndexUtil.FULL_TEXT);
 //索引集合
 searchRequest.indices(idEsSet.toArray(new String[idEsSet.size()]));
 //指定查询条件
 SearchSourceBuilder searchSourceBuilder = 
                                   new SearchSourceBuilder();
 //查询全部
 searchSourceBuilder.query(QueryBuilders.matchAllQuery());
 //查询部分
 searchSourceBuilder.query(QueryBuilders.matchQuery
                                      ("province", "黑龙江"));
  //查询部分(前缀查询)
 searchSourceBuilder.query(QueryBuilders.prefixQuery
                                            ("city", "杭州"));
  //查询部分(模糊查询,并指定前两个字不允许出错)
 searchSourceBuilder.query(QueryBuilders.fuzzyQuery
                    ("city", "杭州啦啦啦啦啦").prefixLength(2));
  //查询部分(类似Mysql中的like,在字符串中指定通配符* 和占位符?)
 searchSourceBuilder.query(QueryBuilders.
                                wildcardQuery("city", "杭*"));
  //查询范围(gt 大于  gte 大于等于  lt 小于  lte 小于等于)
  searchSourceBuilder.query(QueryBuilders.
                     rangeQuery("girlFriend").lte(10).gte(5));
  //查询(手写正则)
  searchSourceBuilder.query(QueryBuilders.
                        regexpQuery("iphone", "139[0-9]{8}"));

  BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
  //查询省份是杭州或黑龙江(should -> 相当于or)
  boolQueryBuilder.should(QueryBuilders.
                               termQuery("province", "杭州"));
  boolQueryBuilder.should(QueryBuilders.
                             termQuery("province", "黑龙江"));
  //查询不是男的
  boolQueryBuilder.mustNot(QueryBuilders.termQuery("xb", 1));
  //查询smsContent包含西湖和良渚 (must -> 相当于 and)
  boolQueryBuilder.must(QueryBuilders.matchQuery("smsContent", "西湖"));
  boolQueryBuilder.must(QueryBuilders.matchQuery("smsContent", "良渚"));
  //过滤
  boolQueryBuilder.filter(QueryBuilders.
                            termQuery("corpName", "西湖白娘子"));
  boolQueryBuilder.filter(QueryBuilders.
                                    rangeQuery("fee").lte(5));
        
 searchSourceBuilder.query(boolQueryBuilder);
 searchSourceBuilder.size(10000);
 //指定查询字段
 searchSourceBuilder.fetchSource(new String[]{"City","Name"}
                                                       ,null);
 //去重操作 (" 需要去重的字段")
 searchSourceBuilder.collapse(new CollapseBubilder("value"));
 searchRequest.source(searchSourceBuilder);
 //执行查询
 SearchResponse searchResponse = restHighLevelClient.
                search(searchRequest, RequestOptions.DEFAULT);

 SearchHits searchHits = searchResponse.getHits();

 searchHits .forEach( searchHit -> {
 String sourceAsString =searchHit.getSourceAsString();
 JSONObject jsonObject =JSON.parseObject(sourceAsString);
 //操作数据
 });

判断索引是否存在

GetIndexRequest getIndexRequest =new GetIndexRequest();
String indexName ="name";
getIndexRequest.indices(indexName);
boolean exists = restHighLevelClient.indices().
              exists(getIndexRequest, RequestOptions.DEFAULT);

es桶查询(单层)

public List<TaskUserObjRelatedVO> queryTaskUserObjRelated(TaskWorkLogPageDto entityDto)
    {
        List<TaskUserObjRelatedVO> relatedVOList = Lists.newArrayList();
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        boolQueryBuilder.filter(QueryBuilders.termQuery("deleted", "0"));
        boolQueryBuilder.filter(QueryBuilders.termsQuery("taskId", entityDto.getTaskIds()));
        boolQueryBuilder.filter(QueryBuilders.termsQuery("executorIds", entityDto.getUserIdLists()));
        
        AggregationBuilder ab = AggregationBuilders.terms("executorIdsTerms")
                .field("executorIds.keyword")
                .size(BUCKET_MAX);
        或者
        BoolQueryBuilder boolQueryBuilder1 =new BoolQueryBuilder();
        boolQueryBuilder1.filter(QueryBuilders.termsQuery("status,Lists.newArrayList(1,3)));
        AggregationBuilder ab = AggregationBuilders.filter("statusAgg",boolQueryBuilder1");
        取值时:Filter statusAgg =searchResponse.getAggregations.get("statusAgg");
        long finish =statusAgg.getDocCount();
     
        SearchSourceBuilder sb = new SearchSourceBuilder();
        sb.query(boolQueryBuilder);
        sb.aggregation(ab);
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices(EsDicIndexUtil.getTaskObjectLogIndex(entityDto.getTaskIds()));
        searchRequest.types(EsDicIndexUtil.FULL_TEXT);
        searchRequest.source(sb);
        try
        {
            SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
            Terms terms = response.getAggregations().get("executorIdsTerms");
            for (Terms.Bucket bucket : terms.getBuckets())
            {
                TaskUserObjRelatedVO objRelatedVO = new TaskUserObjRelatedVO();
                for (String userId : entityDto.getUserIdLists())
                {
                    if (userId.equals(bucket.getKeyAsString()))
                    {
                        objRelatedVO.setUserId(Long.valueOf(bucket.getKeyAsString()));
                        Long docCount = bucket.getDocCount();
                        objRelatedVO.setObjCount(docCount.intValue());
                        relatedVOList.add(objRelatedVO);
                    }
                }
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return relatedVOList;
    }

es桶查询(双层)

public List<JSONObject> queryDeptGuidancebyObjectId(Map<String, Collection<Integer>> map,
            Map<String, List<String>> ysidgxdwMap, List<String> deptCodeList)
    {
        MultiSearchRequest multiSearchRequest = new MultiSearchRequest();
        BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder();
        boolQueryBuilder1.filter(QueryBuilders.termsQuery("status", Lists.newArrayList(1, 3)));
        List<String> searchObjectIdList = Lists.newArrayList();
        for (String key : map.keySet())
        {
            List list = (List) map.get(key);
            if (CollectionUtils.isEmpty(list))
            {
                continue;
            }
            BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
            boolQueryBuilder.filter(QueryBuilders.termQuery("deleted", "0"));
            boolQueryBuilder.filter(QueryBuilders.termsQuery("taskId", list));
            boolQueryBuilder.filter(QueryBuilders.termQuery("objectSourceId", key));
            boolQueryBuilder.filter(QueryBuilders.termsQuery("executeDeptCode", deptCodeList));
            if (Objects.nonNull(ysidgxdwMap) && ysidgxdwMap.containsKey(key))
            {
                //任务链字段
                boolQueryBuilder.filter(QueryBuilders.termsQuery("objectId", ysidgxdwMap.get(key)));
            }
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.size(0);
            searchSourceBuilder.query(boolQueryBuilder);
            searchSourceBuilder.aggregation(
                    AggregationBuilders.terms("executeDeptCode").field("executeDeptCode").size(MAX_SIZE).subAggregation(
                            AggregationBuilders.filter("statusAgg", boolQueryBuilder1)));
            
            SearchRequest searchRequest = new SearchRequest().indices(EsDicIndexUtil.getTaskObjectLogIndex(list))
                    .types(EsDicIndexUtil.FULL_TEXT);
            searchRequest.source(searchSourceBuilder);
            multiSearchRequest.add(searchRequest);
            searchObjectIdList.add(key);
        }
        if (CollectionUtils.isEmpty(searchObjectIdList))
        {
            return Lists.newArrayList();
        }
        MultiSearchResponse multiSearchResponse = queryMElasticSearch(multiSearchRequest);
        int i = 0;
        List<JSONObject> resList = Lists.newArrayList();
        for (String key : searchObjectIdList)
        {
            JSONObject object = new JSONObject();
            object.put("key", key);
            MultiSearchResponse.Item item = multiSearchResponse.getResponses()[i];
            SearchResponse searchResponse = item.getResponse();
            Terms terms = searchResponse.getAggregations().get("executeDeptCode");
            if (!ObjectUtils.isEmpty(terms))
            {
                Map<String, Map<String, Integer>> deptMap = Maps.newHashMap();
                for (Terms.Bucket bucket : terms.getBuckets())
                {
                    String deptKey = bucket.getKeyAsString();
                    Map<String, Integer> mapCount = Maps.newHashMap();
                    // 指导数
                    Integer instructCount = Long.valueOf(bucket.getDocCount()).intValue();
                    
                    // 完成数
                    Filter statusAgg = bucket.getAggregations().get("statusAgg");
                    Integer finishCount = Long.valueOf(statusAgg.getDocCount()).intValue();
                    
                    mapCount.put("finishCount", finishCount);
                    mapCount.put("instructCount", instructCount);
                    deptMap.put(deptKey, mapCount);
                }
                object.put("executeDeptCode", deptMap);
            }
            else
            {
                object.put("executeDeptCode", Maps.newHashMap());
            }
            
            resList.add(object);
            i++;
        }
        return resList;
        
    }

 public MultiSearchResponse queryMElasticSearch(MultiSearchRequest multiSearchRequest)
    {
        MultiSearchResponse searchResponse = null;
        try
        {
            searchResponse = client.msearch(multiSearchRequest, RequestOptions.DEFAULT);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return searchResponse;
    }

匹配多个字段(双层)

BoolQueryBuilder boolQueryBuilder =new BoolQueryBuilder ();
boolQueryBuilder .filter(QueryBuilders.termQuery("deletef",0));  ^^
BoolQueryBuilder builder =new BoolQueryBuilder ();-------------------------------
builder.should(QueryBuilders.termQuery("labelObjectSourceId",controId));---------
builder.should(QueryBuilders.termQuery("objectSourecId",controId)); -------------
boolQueryBuilder.must(builder);-------------------------^^----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值