Elasticsearch7.6.2 RestHighLevelClient查询用法 must should(and or 关系)
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查询的写法为利用 must
和 should
配合:
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 关系)的更多相关文章
- Hibernate中Restrictions查询用法(转)
Restrictions查询用法 HQL运算符 QBC运算符 含义 = Restrictions.eq() 等于equal <> Restrictions.ne() 不等于not equa ...
- mysql union 和 left join 结合查询用法
union 和 left join 结合查询用法 SELECT u.nickname,z.group_comming_type,z.id,z.user_id,z.title,z.create_time ...
- mysql子查询用法
mysql子查询用法 1 可以当值来用<pre>select id from hcyuyin_share where id=(select id from hcyuyin_share li ...
- MongoDB高级查询用法大全
转载 http://blog.163.com/lgh_2002/blog/static/440175262012052116455/ 详见官方的手册: http://www.mongodb.org/d ...
- Oracle学习笔记:with as子查询用法
With as短语,也叫做子查询部分(subquery factoring),可以定义一个SQL片断,该SQL片断会被整个SQL语句用到.该语句会在真正的查询之前预先构造一个临时表,之后可以多次使用做 ...
- MongoDB查询用法大全
转载 http://blog.163.com/lgh_2002/blog/static/440175262012052116455/ 详见官方的手册: http://www.mongodb.org/d ...
- RestHighLevelClient查询es
本篇分享的是es官网推荐的es客户端组件RestHighLevelClient的使用,其封装了操作es的crud方法,底层原理就是模拟各种es需要的请求,如put,delete,get等方式:本篇主要 ...
- GridView和DATAGRID前后台查询用法的比较
Grideview前台: <DIV class="mainDiv" id="GridWidth"> <ASP:GridView id=&quo ...
- dev treelist和searchcontrol组合模糊查询用法
这里需要用到两个控件,是dev的treelist和searchcontrol,首先呢树形控件要形成树形我在这就不多说了 因为这里是记录下searchcontrol这控件的用法 首先写这三行代码,里面都 ...
随机推荐
- Halcon · 曲线宽度检测算法总结
视觉检测中,直线的宽度很好检测,即两条平行线的垂直距离,而曲线的宽度检测则需要另辟蹊径. 检测图像中曲线边缘的宽度,用以判断边缘是否崩缺,总结如下五种方法: 1.图像匹配判断 概述:建立标准图像参考, ...
- 零基础学Python:元组(Tuple)详细教程
Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可https://jq.qq.com/?_wv=1 ...
- 扩展新的WCV到标准的WC后,不能在业务角色里面看见视图解决方法
by zyi 感谢群主红枣的分享 1.把你的WCVIEW扩展进WC中 2.使用UI Designer打开你的WCVIEW 3.更改你的WCVIEW名字
- 7.Spark SQL
1.分析SparkSQL出现的原因,并简述SparkSQL的起源与发展. SparkSQL出现是因为关系数据库已经不能满足各种在大数据时代新增的用户需求.首先,用户需要在不同的结构化和非结构化数据中执 ...
- 抓包整理外篇——————autoResponder、composer 、statistics [ 三]
前言 经过了前文的介绍的部分已经能够为自己抓包提供一个舒适的环境了,但是舒服的拿到我们的包后,可能有些需求还是难以搞定,fiddler 提供了我们一些其他模块,让我们工作轻松,请往下看. 正文 aut ...
- freeswitch拨打分机号源代码跟踪
概述 freeswitch是一款非常好用的开源VOIP软交换平台. 之前我们有介绍过使用fs拨打分机号的方法,其中代码流程是比较复杂的,所以单独开一章介绍. fs拨打分机号,是使用send_dtmf接 ...
- Java开发学习(十二)----基于注解开发依赖注入
Spring为了使用注解简化开发,并没有提供构造函数注入.setter注入对应的注解,只提供了自动装配的注解实现. 1.环境准备 首先准备环境: 创建一个Maven项目 pom.xml添加Spring ...
- 5-8 Resource 静态资源服务器
静态资源服务器 什么是静态资源服务器 我们无论做什么项目,都会有一些页面中需要显示的静态资源,例如图片,视频文档等 我们一般会创建一个单独的项目,这个项目中保存静态资源 其他项目可以通过我们保存资源的 ...
- Docker 安全及日志管理
Docker 安全及日志管理 容器的安全性问题的根源在于容器和宿主机共享内核. 容器里的应用导致Linux内核崩溃,那么整个系统可能都会崩溃. 虚拟机并没有与主机共享内核,虚拟机崩溃一般不会导致宿主机 ...
- Solution -「2021.11.27」\Infty
T1. 显然往 \(x < 0, y < 0\) 的点走一定不优. 根据转移式可发现 \(C(x, y)\) 即从 \((0, 0)\) 走到 \((x, y)\) 的方案数 \(\dbi ...