1. 引入jar

        <dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.2</version>
</dependency>

2. 初始化RestHighLevelClient

@Configuration
public class ElasticSearchClientConfig { @Value("${es.hostname}")
private String hostname; @Value("${es.port}")
private Integer port; @Value("${es.scheme}")
private String scheme; @Bean("esClient")
public RestHighLevelClient esClient(){
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost(hostname, port, scheme)));
return client;
} }

4. 查询

@Slf4j
@Component
public class MzChangeLogDao { @Value("${mk.mz.changLog.index}")
private String indexName; @Autowired
@Qualifier("esClient")
private RestHighLevelClient restHighLevelClient; public List<Object> queryChangeLog(String table, String dbName, String elementsId, String idField) {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.matchQuery("fieldA", table));
boolQueryBuilder.must(QueryBuilders.matchQuery("filedB", dbName));
if (StringUtils.isNotBlank(elementsId)) {
BoolQueryBuilder shouldQueryBuilder = QueryBuilders.boolQuery();
String[] idFiledArr = idField.split(",");
for (String id : idFiledArr) {
shouldQueryBuilder.should(QueryBuilders.matchQuery(id, elementsId));
}
boolQueryBuilder.must(shouldQueryBuilder);
} searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.from(0);
searchSourceBuilder.size(100);
searchSourceBuilder.sort(new FieldSortBuilder("log_time").order(SortOrder.DESC));
SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = null;
try {
searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
} catch (Exception e) {
// 这里有可能会抛ElasticsearchException,比如没索引 没字段啥的
log.error("请求ES出错: ", e);
throw new BizException("请求ES出错: ", e);
}
List<Object> retList = new ArrayList<>();
// 根据状态和数据条数验证是否返回了数据
if (RestStatus.OK.equals(searchResponse.status()) && searchResponse.getHits().getTotalHits().value > 0) {
SearchHits hits = searchResponse.getHits();
for (SearchHit hit : hits) {
// 将 JSON 转换成对象
//UserInfo userInfo = JSON.parseObject(hit.getSourceAsString(), UserInfo.class);
Object json = JSONObject.parse(hit.getSourceAsString());
retList.add(json);
}
}
return retList;
}
}

5. must should 解释

用 mysql语法 举例比如 要查询

 where fieldA = 'aaaa' and filedB = 'bbbbb' and (filedC = 'c1' or filedC = 'c2');

对于上述查询,针对ES: RestHighLevelClient查询的写法为利用 mustshould 配合:

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.matchQuery("fieldA", "aaaa"));
boolQueryBuilder.must(QueryBuilders.matchQuery("filedB", "bbbb")); BoolQueryBuilder shouldQueryBuilder = QueryBuilders.boolQuery();
shouldQueryBuilder.should("filedC", "c1");
shouldQueryBuilder.should("filedC", "c2");
boolQueryBuilder.must(shouldQueryBuilder); ...

Elasticsearch7.6.2 RestHighLevelClient查询用法 must should(and or 关系)的更多相关文章

  1. Hibernate中Restrictions查询用法(转)

    Restrictions查询用法 HQL运算符 QBC运算符 含义 = Restrictions.eq() 等于equal <> Restrictions.ne() 不等于not equa ...

  2. mysql union 和 left join 结合查询用法

    union 和 left join 结合查询用法 SELECT u.nickname,z.group_comming_type,z.id,z.user_id,z.title,z.create_time ...

  3. mysql子查询用法

    mysql子查询用法 1 可以当值来用<pre>select id from hcyuyin_share where id=(select id from hcyuyin_share li ...

  4. MongoDB高级查询用法大全

    转载 http://blog.163.com/lgh_2002/blog/static/440175262012052116455/ 详见官方的手册: http://www.mongodb.org/d ...

  5. Oracle学习笔记:with as子查询用法

    With as短语,也叫做子查询部分(subquery factoring),可以定义一个SQL片断,该SQL片断会被整个SQL语句用到.该语句会在真正的查询之前预先构造一个临时表,之后可以多次使用做 ...

  6. MongoDB查询用法大全

    转载 http://blog.163.com/lgh_2002/blog/static/440175262012052116455/ 详见官方的手册: http://www.mongodb.org/d ...

  7. RestHighLevelClient查询es

    本篇分享的是es官网推荐的es客户端组件RestHighLevelClient的使用,其封装了操作es的crud方法,底层原理就是模拟各种es需要的请求,如put,delete,get等方式:本篇主要 ...

  8. GridView和DATAGRID前后台查询用法的比较

    Grideview前台: <DIV class="mainDiv" id="GridWidth"> <ASP:GridView id=&quo ...

  9. dev treelist和searchcontrol组合模糊查询用法

    这里需要用到两个控件,是dev的treelist和searchcontrol,首先呢树形控件要形成树形我在这就不多说了 因为这里是记录下searchcontrol这控件的用法 首先写这三行代码,里面都 ...

随机推荐

  1. SAP IDOC-Segment E1EDP19 Document Item Object Identification

    PO创建时,通过IDOC EDI 接口自动创建SO 案例. BD54 配置逻辑系统 SCC4 给集团分配逻辑系统  SM59 新建RFC 链接 WE21 创建IDOC 处理端口 we20 创建合作伙伴 ...

  2. SAP MM- BAPI_PO_CHANGE 更新PO version 信息(version management)

    目的 Version 信息的Complated 字段,自动打勾 实例程序 *&--------------------------------------------------------- ...

  3. RPA应用场景-定点取数

    场景概述定点取数 所涉系统名称业务系统,Excel 人工操作(时间/次) 8 小时 所涉人工数量 2 操作频率实时 场景流程 1.从业务系统中拉取指定字段值的数据填入Excel: 2.将Excel每隔 ...

  4. 细说GaussDB(DWS)复杂多样的资源负载管理手段

    摘要:对于如此多的管控功能,管控起来实际的效果到底如何,本篇文章就基于当前最新版本,进行效果实测,并进行一定的分析说明. 本文分享自华为云社区<GaussDB(DWS) 资源负载管理:并发管控以 ...

  5. idea显示 RunDashboard ,多个启动项时列表显示

    在.idea(项目所在文件夹中)下的workspace.xml文件中找到 <component name="RunDashboard"> 标签,然后添加如下节点 < ...

  6. go-zero微服务实战系列(十、分布式事务如何实现)

    在分布式应用场景中,分布式事务问题是不可回避的,在目前流行的微服务场景下更是如此.比如在我们的商城系统中,下单操作涉及创建订单和库存扣减操作两个操作,而订单服务和商品服务是两个独立的微服务,因为每个微 ...

  7. (数据科学学习手札140)详解geopandas中基于pyogrio的矢量读写引擎

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,前不久我在一篇文章中给大家分享 ...

  8. 研发效能生态完整图谱&DevOps工具选型必看

    本文主要梳理了研发效能领域完整的方向图谱以及主流工具,其中对少部分工具也做了一些点评.看了之后,大家可以对研发效能这个领域有个整体认识,同时研发效能落地的时候也有对应的工具(黑话叫抓手)可以选择. 我 ...

  9. 5-2 Nacos注册中心

    Nacos注册中心 什么Nacos Nacos是Spring Cloud Alibaba提供的一个软件 这个软件主要具有注册中心和配置中心的功能 我们先学习它注册中心的功能 微服务中所有项目都必须注册 ...

  10. ooday07 Java_接口

    笔记: 接口: 是一种引用数据类型 由interface定义 只能包含常量和抽象方法------默认权限是public 接口不能被实例化 接口是需要被实现/继承,实现/派生类:必须重写所有抽象方法 一 ...