在没有时间的情况下在ElasticSearch中搜索日期字段值

时间:2015-08-11 12:03:38

标签: elasticsearch elasticsearch-net

我的数据中有一个日期字段为

"type": "date",
"format": "dateOptionalTime"

现在我的日期字段和值是 -

"INITIAL_EXTRACT_DATE" : "2015-04-02T06:47:57.78+05:30"

在搜索时我只根据“2015-04-02”的日期进行搜索。 但我得到0结果。

任何人都可以建议如何搜索确切的日期,并且是任何日期。

现在我正在尝试这个 -

确切日期 -

"term": {
          "IH_PT_DSC": {
             "value": "2015-04-02"
          }
       }

对于任何日期 -

"terms": {
         "IH_PT_DSC": [
            "2015-04-02",
            "2015-04-03",
            "2015-04-03"
         ]
      }

2 个答案:

答案 0 :(得分:3)

您可以使用range filtergte / lte使用format{ "constant_score": { "filter": { "range" : { "IH_PT_DSC" : { "gte": "2015-04-02", "lte": "2015-04-02", "format": "yyyy-MM-dd" } } } } } 参数,只指定日期部分(即离开出时间部分)

{
    "constant_score": {
        "filter": {
            "range" : {
                "IH_PT_DSC" : {
                    "gte": "2015-04-01",
                    "lte": "2015-04-03",
                    "format": "yyyy-MM-dd"
                }
            }
        }
    }
}

如果您需要指定多个日期,也可以轻松完成。

bool/should

最后,如果您需要查询不相交的日期间隔,只需使用{ "constant_score": { "filter": { "bool": { "should": [ { "range": { <--- interval 1 "IH_PT_DSC": { "gte": "2015-04-01", "lte": "2015-04-03", "format": "yyyy-MM-dd" } } }, { "range": { <--- interval 2 "IH_PT_DSC": { "gte": "2015-04-05", "lte": "2015-04-08", "format": "yyyy-MM-dd" } } }, { "range": { <--- interval 3 "IH_PT_DSC": { "gte": "2015-04-10", "lte": "2015-04-12", "format": "yyyy-MM-dd" } } } ] } } } } 过滤器:

select emp_id, max(promo_date)
from promotions
group by emp_id;

答案 1 :(得分:2)

您确实应该使用date range query和格式参数(但更简单,如上一个答案所述)

确切日期

{
 "range": {
  "IH_PT_DSC": {
   "value": {
    "gte": "2015-04-02||/d",
    "lte": "2015-04-02||/d"
   }
  }
 }
}

For Is of date - 使用布尔过滤器&#34;应该&#34;不同的块在一起

{
 "bool": {
  "should": [{
    "range": {
     "IH_PT_DSC": {
      "value": {
       "gte": "2015-04-02||/d",
       "lte": "2015-04-02||/d"
      }
     }
    }
   }, {
    "range": {
     "IH_PT_DSC": {
      "value": {
       "gte": "2015-06-07||/d",
       "lte": "2015-06-07||/d"
      }
     }
    }
   }
  ]
 }
}