1、布尔过滤器

    前篇文章中(term精确查找)的两个例子都是单个过滤器(filter)的使用方式。 在实际应用中,我们很有可能会过滤多个值或字段。比方说,怎样用 Elasticsearch 来表达下面的 SQL ?

    

    这种情况下,我们需要 bool (布尔)过滤器。 这是个 复合过滤器(compound filter) ,它可以接受多个其他过滤器作为参数,并将这些过滤器结合成各式各样的布尔(逻辑)组合。

    一个 bool 过滤器由三部分组成:

    

    

    must
    所有的语句都 必须(must) 匹配,与 AND 等价。
    must_not
    所有的语句都 不能(must not) 匹配,与 NOT 等价。
    should
    至少有一个语句要匹配,与 OR 等价。

    只须将它们置入 bool 过滤器的不同部分即可,一个 bool 过滤器的每个部分都是可选的(例如,我们可以只有一个 must 语句),而且每个部分内部可以只有一个或一组过滤器。

    用 Elasticsearch 来表示本部分开始处的 SQL 例子,将两个 term 过滤器置入 bool 过滤器的 should 语句内,再增加一个语句处理 NOT 非的条件:

GET /my_store/products/_search
{
"query" :
{
"bool" :
{
"should" :
[
{ "term" : {"price" : 20}},
{ "term" : {"productID" : "XHDK-A-1293-#fJ3"}}
],
"must_not" : {"term" : {"price" : 30} }
}
}
}

    

    

    在 should 语句块里面的两个 term 过滤器与 bool 过滤器是父子关系,两个 term 条件需要匹配其一。

    如果一个产品的价格是 30 ,那么它会自动被排除,因为它处于 must_not 语句里面。

    结果返回了 2 个命中结果,两个文档分别匹配了 bool 过滤器其中的一个条件

 

  2、嵌套布尔过滤器

    

    尽管 bool 是一个复合的过滤器,可以接受多个子过滤器,需要注意的是 bool 过滤器本身仍然还只是一个过滤器。 这意味着我们可以将一个 bool 过滤器置于其他 bool 过滤器内部,

    这为我们提供了对任意复杂布尔逻辑进行处理的能力。

    对于以下这个 SQL 语句:

    

    我们将其转换成一组嵌套的 bool 过滤器:

GET /my_store/products/_search
{
"query" :
{
"bool" :
{
"should" :
[
{ "term" : {"productID" : "XHDK-A-1293-#fJ3"}},
{ "bool" :
{
"must" :
[
{ "term" : {"productID" : "JODL-X-1937-#pV7"}},
{ "term" : {"price" : 30}}
]
}
}
]
}
}
}

    

    因为 term 和 bool 过滤器是兄弟关系,他们都处于外层的布尔逻辑 should 的内部,返回的命中文档至少须匹配其中一个过滤器的条件。

    这两个 term 语句作为兄弟关系,同时处于 must 语句之中,所以返回的命中文档要必须都能同时匹配这两个条件。

ElasticSearch 组合过滤器的更多相关文章

  1. Python Elasticsearch api,组合过滤器,term过滤器,正则查询 ,match查询,获取最近一小时的数据

    Python Elasticsearch api   描述:ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.下 ...

  2. elasticsearch 布尔过滤器 游标查询 Scroll

    组合过滤器 | Elasticsearch: 权威指南 | Elastic https://www.elastic.co/guide/cn/elasticsearch/guide/current/co ...

  3. elasticsearch组合多条件查询实现restful api以及java代码实现

    原文:http://blog.java1234.com/blog/articles/372.html elasticsearch组合多条件查询实现restful api以及java代码实现 实际开发中 ...

  4. ElasticSearch:组合查询或复合查询

    Bool查询 允许在单独的查询中组合任意数量的查询,指定的查询语句表名哪些部分是必须匹配(must).应该匹配(should)或不能匹配(must_not) Bool过滤器 和查询功能一致,但是同等情 ...

  5. elasticsearch 过滤器的种类

    elasticsearch之查询过滤 elasticsearch elastic-search xixicat 2月13日发布 推荐 1 推荐 收藏 2 收藏,289 浏览 序 本文主要记录es的查询 ...

  6. Elasticsearch过滤器——filter

    Elasticsearch中的所有的查询都会触发相关度得分的计算.对于那些我们不需要相关度得分的场景下,Elasticsearch以过滤器的形式提供了另一种查询功能.过滤器在概念上类似于查询,但是它们 ...

  7. Elasticsearch 过滤器

    序 本文主要记录es的查询过滤的使用. 使用过滤器 过滤器不影响评分,而评分计算让搜索变得复杂,而且需要CPU资源,因而尽量使用过滤器,而且过滤器容易被缓存,进一步提升查询的整体性能. post_fi ...

  8. 最完整的Elasticsearch 基础教程

    翻译:潘飞(tinylambda@gmail.com) 基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助. 接近实时(NRT)        Ela ...

  9. Python Elasticsearch api

    描述:ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.下面介绍了利用Python API接口进行数据查询,方便 ...

随机推荐

  1. 牛客 NOIp模拟1 T3 保护 解题报告

    保护 题目描述 \(C\)国有\(n\)个城市,城市间通过一个树形结构形成一个连通图.城市编号为\(1\)到\(n\),其中\(1\)号城市为首都.国家有\(m\)支军队,分别守卫一条路径的城市.具体 ...

  2. 设置(settings)

    设置(settings) 题目描述 如题所示,这将是一个关于设置的问题. 你需要通过对一个控制台进行设置,来得到不同的效果. 这个控制台由n个控制元件组成,每个元件有m种设置,其中i号元件的第j种设置 ...

  3. jquery对中文进行base64加密,后台用java进行base64解密

    项目中遇到将中文从前台传到后台过程中,出现乱码,一番尝试之后,均是乱码,然后尝试在js代码中先进行base64加密,然后在Java中再进行解密,完美的解决了乱码问题,步骤如下 一,html页面引入jQ ...

  4. java.net.BindException: Address already in use: JVM_Bind <null>:8080错误

    今天打开myeclipse出现java.net.BindException: Address already in use: JVM_Bind <null>:8080错误 从网上搜了一下大 ...

  5. 用Spring注解的方式实现对某个网页的访问

    本案例的目标是加强对@Controller   @RequestMapping  @Resource  @Service 的感性认识,能过知道这几个注解是怎么用的,以及spring和springmvc ...

  6. saltstack 实现系统初始化

    1.整体结构如下 [root@zabbix init]# pwd /srv/salt/base/init [root@zabbix init]# ll total -rw-r--r-- root ro ...

  7. ie下,jquery为动态添加的节点添加事件,用live

    jQuery向动态生成的内容添加事件响应 jQuery live() 方法详解 [收藏] 发布时间:2013-07-24 点击次数:176 来源:www.daimajiayuan.com jQuery ...

  8. Android BroadcastReceiver使用

    1. 介绍 BroadcastReceiver用于接收广播事件(Intent), 是Android四大组件之一 2. 使用 2.1  实现广播接收类 实现一个广播收类继承BroadcastReceiv ...

  9. Shiro自定义realm实现密码验证及登录、密码加密注册、修改密码的验证

    一:先从登录开始,直接看代码 @RequestMapping(value="dologin",method = {RequestMethod.GET, RequestMethod. ...

  10. validate插件实现表单效验(二)

    一款优秀的表单验证插件——validation插件 特点: l  内置验证规则:拥有必填.数字.email.url和信用卡号码等19类内置验证规则 l  自定义验证规则:可以很方便的自定义验证规则 l ...