Elasticsearch仅查询具有自定义日期格式的年份

时间:2019-01-10 14:10:35

标签: elasticsearch

鉴于我的索引映射如下

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "date": {
          "type": "date",
          "format": "yyyy-MM-dd||yyyy||yyyy-MM"
        }
      }
    }
  }
}

这意味着我可以将文档放入所有允许的日期类型 如果我确保所有文档都支持日期格式yyyy-MM-dd,那么我想使用匹配查询来搜索不同类型,例如提供具有以下字段日期的文档 doc1-日期:2016-1-1 doc2-日期:2017-1-4 doc3-日期:2016-2-1

我希望能够使用匹配项仅提供2016年的查询,并返回doc2和doc3 并且我还希望能够使用2016-1进行搜索,目前elasticsearch并不在乎并且不会引发异常,因为它应该使用所有日期类型

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找range query。我还没有亲自使用过它,因此无法确定语法,但是类似下面的内容应该可以工作:

{
  "query": {
    "range" : {
      "born" : {
        "gte": "2016",
        "lte": "2016",
        "format": "yyyy-MM-dd||yyyy||yyyy-MM"
      }
    }
  }
}

早期版本使用范围过滤器而不是查询,但是如果您使用的是5.x或更高版本,则可以使用范围查询。