有一个场景需要实现 es_table中 isMember = 1 和 isMember !=1
其中isMember!=1有两种可能: isMember = 0 或者 isMember不存在
这种情况需要用到should关键词,同时 跟其他条件 例如注册年在2023 是并列的关系
脚本需要用should包含 两个条件 isMember = 0 或者 isMember不存在
GET es_table/_count
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"terms": {
"isMember": [
0
]
}
}
]
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "isMember"
}
}
]
}
}
]
}
}
}
if (null != isMember) {
if (1 == isMember) builder.must(QueryBuilders.termQuery("isMember", isMember));
else if (0 == isMember) {
//非会员的筛选改为 不是1的isMember数据
BoolQueryBuilder notMember = QueryBuilders.boolQuery() ;
notMember.should(QueryBuilders.termQuery("isMember", 0));
notMember.should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("isMember")));
builder.must(notMember);
}
}
if(StringUtils.isNotBlank(phone)){
builder.must(QueryBuilders.termsQuery("phone.keyword", phone, H.phoneAesEncrypt(phone)));
}
如果直接在外层 达不到理想的想过 should变成外层条件了
builder.should(QueryBuilders.boolQuery()
.must(QueryBuilders.termsQuery("isMember", 0)));
builder.should(QueryBuilders.boolQuery()
.mustNot(QueryBuilders.existsQuery("isMember")));
文章讨论如何在Elasticsearch中使用should和bool查询来处理isMember字段的复杂条件,包括isMember等于1、不等于1(即0或不存在)。示例脚本展示了如何构建查询,其中isMember条件与注册年和电话号码查询并列。



8万+

被折叠的 条评论
为什么被折叠?



