zoukankan      html  css  js  c++  java
  • Elasticsearch 范围查询

    范围查询(range query)
    范围查询用于匹配某些字段的字段值位于特定范围内的文档。Lucene查询的类型依赖于字段的类型,对于字符串字段,是TermRangeQuery,而对于数字/日期字段,查询是NumericRangeQuery。
    
    GET _search
    {
      "query": {
        "range": {
          "age": {
              "gte": 25,
              "lte": 30
          }
        }
      }
    }
    note:查询age字段大于等于25小于等于30的文档。
    
    范围查询接收以下参数:
    
    gte:大于等于
    gt:大于
    lte:小于等于
    lt:小于
    boost:设置查询的推动值(boost),默认为1.0
    日期字段的范围
    当范围查询运行在日期类型的字段上时,可以通过日期数学指定范围。
    
    GET _search
    {
        "query": {
            "range" : {
                "date" : {
                    "gte" : "now-1d/d",
                    "lt" :  "now/d"
                }
            }
        }
    }
    日期数学与舍入
    当使用日期数学将日期舍入到最近的天、月、小时等时,舍入后的日期依赖于范围的边界是否被包含。
    
    向上舍入移动到舍入范围的最后一毫秒,向下舍入移动到舍入范围的第一毫秒。
    
    gt:大于舍入的日期,2014-11-18||/M变为2014-11-30T23:59:59.999,即不包括整个月。
    gte:大于等于舍入的日期,2014-11-18||/M变为2014-11-01,即包括整个月。
    lt:小于舍入的日期,204-11-18||/M变为2014-11-01,即不包括整个月。
    lte:小于等于舍入的日期,2014-11-18||/M变为2014-11-30T23:59:59.999,即包含整个月。
    范围查询中的日期格式
    默认使用设置在日期字段中的format参数解析格式化日期,但是,此参数可以通过在范围查询中设置format参数来进行覆盖。
    
    GET _search
    {
        "query": {
            "range" : {
                "born" : {
                    "gte": "01/01/2012",
                    "lte": "2013",
                    "format": "dd/MM/yyyy||yyyy"
                }
            }
        }
    }
    范围查询中的时区
    通过在日期值中指定时区或使用time_zone参数指定时区,可以转换日期时区。
    
    GET _search
    {
        "query": {
            "range" : {
                "timestamp" : {
                    "gte": "2015-01-01 00:00:00", 
                    "lte": "now", 
                    "time_zone": "+01:00"
                }
            }
        }
    }
    
    note:gte参数的日期值将会被转化为2014-12-31T23:00:00 UTC
    note:now不会被time_zone参数影响(日期必须存储为UTC)
    范围搜索案例
    2.1 制造数据
    POST /forum/article/_bulk
    { "update": { "_id": "1"} }
    { "doc" : {"view_cnt" : 30} }
    { "update": { "_id": "2"} }
    { "doc" : {"view_cnt" : 50} }
    { "update": { "_id": "3"} }
    { "doc" : {"view_cnt" : 100} }
    { "update": { "_id": "4"} }
    { "doc" : {"view_cnt" : 80} }
    复制代码
    2.2 搜索浏览量在30~60之间的帖子
    GET /forum/article/_search
    {
      "query": {
        "constant_score": {
          "filter": {
            "range": {
              "view_cnt": {
                "gt": 30,
                "lt": 60
              }
            }
          }
        }
      }
    }
    复制代码
    2.3 搜索发帖日期在最近1个月的帖子
    POST /forum/article/_bulk
    { "index": { "_id": 5 }}
    { "articleID" : "DHJK-B-1395-#Ky5", "userID" : 3, "hidden": false, "postDate": "2017-03-01", "tag": ["elasticsearch"], "tag_cnt": 1, "view_cnt": 10 }
     
    GET /forum/article/_search 
    {
      "query": {
        "constant_score": {
          "filter": {
            "range": {
              "postDate": {
                "gt": "2017-03-10||-30d"
              }
            }
          }
        }
      }
    }
     
    GET /forum/article/_search 
    {
      "query": {
        "constant_score": {
          "filter": {
            "range": {
              "postDate": {
                "gt": "now-30d"
              }
            }
          }
        }
      }
    }
  • 相关阅读:
    manjaro更换源
    质子重离子快速蒙卡MCsquare在ubuntu-20.04下的安装
    虚拟机硬盘容量不够如何解决
    《收获,不止oracle》读书笔记-未完
    Jenkins 性能:如何避免陷阱、诊断问题和扩展
    这是一个人工智能,你有什么紧急情况?
    人工智能:备忘单
    AI 变得越来越聪明、越来越快。这创造了我们无法回答的棘手问题
    什么是人工智能?你需要知道的关于人工智能的一切
    jenkins构建成功为何显示蓝色
  • 原文地址:https://www.cnblogs.com/ExMan/p/12916977.html
Copyright © 2011-2022 走看看