Elasticsearch 查询in 和 not in 的实现方式
2017-12-22 12:06
423 查看
最近用到ES查询,因用的是Java写的,需要实现一个需求: 过滤一部分id, 查询时不需要查出来。
既然需要不包含,那么首先需要实现包含的方式(精确完全匹配),这里我们要用到的是termQuery
首先看下ES Bool联合查询的属性:
bool联合查询: must,should,must_not
联合查询就会使用到must,should,must_not三种关键词。
这三个可以这么理解
must: 文档必须完全匹配条件
should: should下面会带一个以上的条件,至少满足一个条件,这个文档就符合should
must_not: 文档必须不匹配条件
具体案例,我需要过滤掉不用的exerciseId:
BoolQueryBuilder exersiceBoolQuery = QueryBuilders.boolQuery();
if (exersiceIds != null && exersiceIds.size() > 0)
{
for (String exerciseId: exersiceIds)
{
exersiceBoolQuery.mustNot(QueryBuilders.termQuery("id", exerciseId));
}
}
最后在发送请求的时候,加上你的exersiceBoolQuery 即可
既然需要不包含,那么首先需要实现包含的方式(精确完全匹配),这里我们要用到的是termQuery
首先看下ES Bool联合查询的属性:
bool联合查询: must,should,must_not
联合查询就会使用到must,should,must_not三种关键词。
这三个可以这么理解
must: 文档必须完全匹配条件
should: should下面会带一个以上的条件,至少满足一个条件,这个文档就符合should
must_not: 文档必须不匹配条件
具体案例,我需要过滤掉不用的exerciseId:
BoolQueryBuilder exersiceBoolQuery = QueryBuilders.boolQuery();
if (exersiceIds != null && exersiceIds.size() > 0)
{
for (String exerciseId: exersiceIds)
{
exersiceBoolQuery.mustNot(QueryBuilders.termQuery("id", exerciseId));
}
}
最后在发送请求的时候,加上你的exersiceBoolQuery 即可
相关文章推荐
- Elasticsearch 查询in 和 not in 的实现方式
- 六种方式实现hibernate查询
- SQL提高查询效益之in、not in、between、like等条件讲述
- MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)
- hibernate六种方式实现的查询
- 源码解读Mybatis List列表In查询实现的注意事项
- Mybatis多参数查询与列表查询不同方式实现
- MyBatis的一对一查询实现方式
- 四种方式实现SQLServer 分页查询
- c++ 实现滚动查询Elasticsearch
- Hibernate中通过HQL/JPQL查询的方式实现动态数据获取
- mybatis实现in传入数组查询
- IN、EXISTS和LEFT JOIN,NOT IN、NOT EXISTS和INNER JOIN在存在与不存在的查询效率
- 面向领域驱动架构的查询实现方式
- 以查询方式实现1s定时
- Mybatis实现in查询(注解形式和xml形式)
- Web方式查询进度条实现
- 21、SSM框架-Mybatis多参数查询与列表查询不同方式实现(3)
- T-SQL查询:慎用 IN 和 NOT IN
- Mybatis List列表In查询实现的注意事项