csonezp

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  69 随笔 :: 0 文章 :: 50 评论 :: 37万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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检索使用方式了。

 

posted on   csonezp  阅读(2529)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示