资讯专栏INFORMATION COLUMN

elasticsearch之查询过滤

andycall / 513人阅读

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

本文主要记录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
        }
    }
}
参考

elasticsearch-search-request-body

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/34064.html

相关文章

  • elasticsearch 概念(2)插件和使用

    摘要:的精确值及倒排索引的数据可被广义的分为两种类型和。其次,为了完成此类域的搜索,倒排索引中的数据还需进行正规化为标准格式,才能评估其与用户搜索请求字符串的相似度。 安装 ES依赖于JDK,使用Oracke JDK或OpenJDK均可。 JDK在不同平台的安装方式各异,具体方法这里不再介绍。ES的安装也非常容易,通常只需要简单修改其配置文件中的集群名称,并启动服务即可,这里不再赘述。 El...

    Pines_Cheng 评论0 收藏0
  • Elasticsearch检索实战

    摘要:检索中需包含索引名,为查询关键字。说明后续将使用对比语法进行搜索条件示例。结构化查询结构化查询支持全文检索,会对检索结果进行相关性计算。聚合该部分较复杂,已单独使用文章进行说明,见检索聚合和部分。 首发于 樊浩柏科学院 随着公司房源数据的急剧增多,现搜索引擎 Solr 的搜索效率和建立索引效率显著降低,而 Elasticsearch 是一个实时的分布式搜索和分析引擎,它是基于全文搜索...

    android_c 评论0 收藏0
  • 写给自己的Elasticsearch使用指南

    摘要:写给自己的使用指南在处理大数据搜索方面拥有关系型数据库不可比拟的速度优势。什么是的文档中文档是以的数据包形式存储的,它有三个元数据。使用者无需关心。匹配为或摇了摇头的结果使用关键词匹配中文摇了摇头过滤过滤是按照指定范围查找数据。 写给自己的Elasticsearch使用指南 ES在处理大数据搜索方面拥有关系型数据库不可比拟的速度优势。这篇不是什么专业的ES指南,也不是ES分析,这里只是...

    wenhai.he 评论0 收藏0
  • 如何在Rancher上运行Elasticsearch

    摘要:是当前最流行的大数据集分析平台之一,对于日志聚合商业智能以及机器学习等各类用例而言,都是一个很有用的工具。是在大型非结构化数据集上运行分析的最佳方法之一,在从日志聚合机器学习到商业智能等许多领域中皆被广泛使用。 Elasticsearch是当前最流行的大数据集分析平台之一,对于日志聚合、商业智能以及机器学习等各类用例而言,Elasticsearch都是一个很有用的工具。Elastics...

    高璐 评论0 收藏0
  • 如何在Rancher上运行Elasticsearch

    摘要:是当前最流行的大数据集分析平台之一,对于日志聚合商业智能以及机器学习等各类用例而言,都是一个很有用的工具。是在大型非结构化数据集上运行分析的最佳方法之一,在从日志聚合机器学习到商业智能等许多领域中皆被广泛使用。 Elasticsearch是当前最流行的大数据集分析平台之一,对于日志聚合、商业智能以及机器学习等各类用例而言,Elasticsearch都是一个很有用的工具。Elastics...

    Anshiii 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<