【问题标题】:Combining range and script filter in elastic-search在弹性搜索中结合范围和脚本过滤器
【发布时间】:2016-04-12 21:20:18
【问题描述】:

我正在尝试执行以下操作,但这会导致 null_pointer_exception。

我想要实现的是范围(独立此工作)和过滤所有星期六之间的结果。但是我尝试过组合过滤器。那么有没有办法组合这些过滤器,或者我应该寻求替代解决方案?

"query": {
        "filtered": {
            "query": {
                "match_all": []
            },
            "filter": {
                "range": {
                    "myDateField": {
                        "from": "2015-10-09 00:00:00",
                        "to": "2015-12-31 00:00:00"
                    }
                },
                "script": {
                    "script": ["doc['myDateField'].date.dayOfWeek == 6"]
                }
            }
        }
    },

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    正如我在对@Richa 的回答中提到的,filtered 查询也是deprecated。您应该将其全部删除,只需使用包含rangescript 过滤器的bool/filter

    {
      "query": {
        "bool": {
          "filter": [
            {
              "range": {
                "myDateField": {
                  "from": "2015-10-09 00:00:00",
                  "to": "2015-12-31 00:00:00"
                }
              }
            },
            {
              "script": {
                "script": [
                  "doc['myDateField'].date.dayOfWeek == 6"
                ]
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

      如果您的版本是 bool filter 组合多个查询:

      {
      "query": {
        "bool": {
           "must": [
              {
                 "range": {
                    "myDateField": {
                       "from": "2015-10-09 00:00:00",
                       "to": "2015-12-31 00:00:00"
                    }
                 }
              },
              {
                 "script": {
                    "script": [
                       "doc['myDateField'].date.dayOfWeek == 6"
                    ]
                 }
              }
           ]
          }
        }
      } 
      

      Filters 在 2.x 版本中已被弃用。您可以使用Bool Query 来实现相同的目的。

      【讨论】:

      • 请注意,filtered query 也已弃用。你应该把它全部删除,只使用包含rangescriptbool/filter
      • @val 你能举个例子吗?
      • 让我们给@Richa 几分钟,然后我会开始。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多