elasticsearch 过滤器的种类

elasticsearch之查询过滤

xixicat 2月13日发布

  • 推荐 1 推荐
  • 收藏 2 收藏,289 浏览

本文主要记录es的查询过滤的使用。

使用过滤器

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

post_filter(先查询再过滤)

{
    "query": {
        "match":{"title":"Catch-22"}
    },
    "post_filter":{
        "term":{"year":1961}
    }
}

filtered(先过滤再查询,速度快)

{
    "query": {
        "filtered": {
            "query": {
                "match": {
                    "title": "Catch-22"
                }
            },
            "filter": {
                "term": {
                    "year": 1961
                }
            }
        }
    }
}

这种方式在2.2版本被废弃调用,改用bool的方式

{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "title": "Catch-22"
                }
            },
            "filter": {
                "term": {
                    "year": 1961
                }
            }
        }
    }
}

过滤器种类

范围过滤器

{
   "post_filter":{
         "range":{
             "year":{
                 "gte":1930,
                 "lte":1990
             }
         }

    }
}

exists过滤器

过滤掉给定字段没有值的文档

{
   "post_filter":{
         "exists":{
             "field":"year"
         }
    }
}

missing过滤器

过滤掉给定字段有值或缺失的文档

{
   "post_filter":{
         "missing":{
             "field":"year",
             "null_value":0,
             "existence":true
         }
    }
}

脚本过滤器

过滤掉发表在一个世纪以前的书

{
   "post_filter":{
         "script":{
             "script":"now - doc[‘year‘].value > 100",
             "params":{"now":2012}
         }
    }
}

类型过滤器

当查询运行在多个索引上时,有用

{
   "post_filter":{
         "type":{
             "value":"book"
         }
    }
}

限定过滤器

限定每个分片返回的文档数

{
   "post_filter":{
         "limit":{
             "value":1
         }
    }
}

标识符过滤器

比如要指定标识符为1,2,3的文档

{
   "post_filter":{
         "ids":{
             "type":["book"],
             "values":[1,2,3]
         }
    }
}

组合过滤器

{
    "query": {
        "bool": {
            "must": {
                "range": {
                    "year": {
                        "gte": 1930,
                        "lte": 1990
                    }
                }
            },
            "should": {
                "term": {
                    "available": true
                }
            },
            "boost": 1
        }
    }
}
时间: 2024-10-08 09:04:07

elasticsearch 过滤器的种类的相关文章

elasticsearch filters特性

使用filters优化查询 ElasticSearch支持多种不同类型的查询方式,这一点大家应该都已熟知.但是在选择哪个文档应该匹配成功,哪个文档应该呈现给用户这一需求上,查询并不是唯一的选择.ElasticSearch 查询DSL允许用户使用的绝大多数查询都会有各自的标识,这些查询也以嵌套到如下的查询类型中: constant_score filterd custom_filters_score 那么问题来了,为什么要这么麻烦来使用filtering?在什么场景下可以只使用queries? 接

AngularJS中的过滤器(filter)

AngularJS中的过滤器是用于对数据的格式化,或者筛选的函数,可以直接通过以下语法使用: {{expression|filter}} {{expression|filter1|filter2}} {{expression|filter1:param1,param2,...|filter2} 过滤器的种类有number,currency,date,json,limitTo,lowercase,uppercase,filter,orderBy. <!DOCTYPE html> <html

01---4中过滤器的总结与使用

1.过滤器的使用(创建一个MyFilter文件夹存储所有的过滤器) 1.1 Authorization 1.1.1创建一个MyAuthorization继承自AuthorizatioAttribute 1.1.2重写OnAuthorization方法,传入一个filterContext 1.1.3 客户端重定向的时候不要使用filterContext.HttpContet.Response.Ridirect(string url),而是使用filterContext.Result,因为第一种不会

安卓 Intent 与/intent-filter的关系详解。

Intent可以分为两种:显式Intent和隐式Intent;显式Intent:通过组件名字字段指定目标组件;因为开发者通常不知道其它应用程序的组件名字,所以,显式Intent通常用于应用程序内部消息传递;例如:一个Activity启动从属的服务或启动一个同级别的Activity;隐式Intent:不指定目标组件的名字(组件名字字段是空);隐式Intent经常用于激活其它应用程序中的组件;Android系统传递一个显式Intent消息对象到一个指定目标组件名字的实例,Intent消息对象中只用组

php—Smarty-7(24)

三.            方法 l  assign      :为模板分配变量 l  assignByRef :为模板分配变量 (按引用传递) l  append  :追加模板变量到一个数组中 l  appendByRef :追加模板变量到一个数组中 (按引用传递) l  clearAllAssign 清除所有已赋值变量 l   clearCache 清除缓存 l  configLoad 加载配置文件 在smarty中,加载配置文件两种方法: 1)在模板中  {config_load file

016-elasticsearch【五】-Query DSL【1】-查询上下文,过滤上下文、match_all

一.概述 Elasticsearch提供基于JSON的完整查询DSL来定义查询.将Query DSL视为查询的AST,由两种类型的子句组成: 叶子查询子句 叶子查询子句在特定字段中查找特定值,例如匹配,词条或范围查询.这些查询可以自己使用. 复合查询子句 复合查询子句包装其他叶或复合查询,并用于以逻辑方式(例如bool或dis_max查询)组合多个查询,或者改变它们的行为(如constant_score查询). 查询子句的行为有所不同,具体取决于它们是在查询上下文还是过滤器上下文中使用. 二.查

大数据学习之HBase

hbase http://hbase.apache.org/index.html 1.什么是hbase HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群. HBASE的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据. HBASE是Google Bigtable的开源实现,但是也有很多不同之处.比如:Google Bigtable利用GFS作为其文

HBase详解

1.   hbase简介 1.1.  什么是hbase HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群. HBASE的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据. HBASE是Google Bigtable的开源实现,但是也有很多不同之处.比如:Google Bigtable利用GFS作为其文件存储系统,HBASE利用Hadoop HDFS

ElasticSearch 组合过滤器

1.布尔过滤器 前篇文章中(term精确查找)的两个例子都是单个过滤器(filter)的使用方式. 在实际应用中,我们很有可能会过滤多个值或字段.比方说,怎样用 Elasticsearch 来表达下面的 SQL ? 这种情况下,我们需要 bool (布尔)过滤器. 这是个 复合过滤器(compound filter) ,它可以接受多个其他过滤器作为参数,并将这些过滤器结合成各式各样的布尔(逻辑)组合. 一个 bool 过滤器由三部分组成: must 所有的语句都 必须(must) 匹配,与 AN