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@gmail.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!