es mapping里有三个字段:

A:Integer

B:Integer

C:TEXT

现在想实现一个查询,来检索  (  (A =1 and B=2)  or (c like "test*")  )的数据。

分析:

 

这个检索条件 被 or 分割成两部分。

第一部分是一个 boo表达式,此表达式的自然语言含义是必须满足 A = 1而且B =2。

这部分用es的api写作:

        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.must(QueryBuilders.termQuery("A",1));
        boolQueryBuilder.must(QueryBuilders.termQuery("B", 2));

 

第二部分是一个前缀匹配,代码:

WildcardQueryBuilder wildcardQuery = QueryBuilders.wildcardQuery("processDefinitionKey", "test*");

 

这样就把一个层叠的检索条件拆分成了两个QueryBuilder,对于这两个QueryBuilder来说,他们之间任一满足即可,这时候就可以再构建一个BoolQueryBuilder将这两个条件组合起来

        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.should(boolQueryBuilder);
        boolQueryBuilder.should(wildcardQuery);

 

这里构建出来的queryBuilder就是 (  (A =1 and B=2)  or (c like "test*")  ) 的es检索使用方式了。

 

作者:|csonezp|,原文链接: https://www.cnblogs.com/csonezp/p/16327842.html

文章推荐

shell脚本获取文件名字

Java虚拟机启动过程解析

『忘了再学』Shell基础 — 20、Shell中的运算符

一文看懂 ZooKeeper ,面试再也不用背八股(文末送PDF)

DirectX11--CPU与GPU计时器

BIGO 的数据管理与应用实践

python-turtle绘制雪容融,已打包成exe可直接运行

【原创】Python 极验滑块验证

【Java 数据结构及算法实战】系列 013:Java队列07——双端

并发编程之volatile与JMM多线程内存模型

手把手带你自定义 Gradle 插件 —— Gradle 系列(2)

hive从入门到放弃(六)——常用文件存储格式