在弹性搜索中组合范围和脚本过滤器

时间:2016-04-12 11:51:24

标签: elasticsearch

我正在尝试执行以下操作,但这会导致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"]
                }
            }
        }
    },

2 个答案:

答案 0 :(得分:0)

如果你的版本是< 2.x版本使用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来实现相同目标。

答案 1 :(得分:0)

正如我对@ Richa的回答所述,filtered查询也是deprecated。您应该将其全部删除,只需使用包含bool/filterrange过滤条件的script

{
  "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"
            ]
          }
        }
      ]
    }
  }
}