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

Muk*_*esh 6 elasticsearch elasticsearch-net

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

"type": "date",
"format": "dateOptionalTime"
Run Code Online (Sandbox Code Playgroud)

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

"INITIAL_EXTRACT_DATE" : "2015-04-02T06:47:57.78+05:30"
Run Code Online (Sandbox Code Playgroud)

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

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

现在我正在尝试这个 -

确切日期 -

"term": {
          "IH_PT_DSC": {
             "value": "2015-04-02"
          }
       }
Run Code Online (Sandbox Code Playgroud)

对于任何日期 -

"terms": {
         "IH_PT_DSC": [
            "2015-04-02",
            "2015-04-03",
            "2015-04-03"
         ]
      }
Run Code Online (Sandbox Code Playgroud)

Val*_*Val 3

您可以为此使用range过滤器gte,通过在/中使用相同的日期lteformat仅指定日期部分的参数(即省略时间部分)

{
    "constant_score": {
        "filter": {
            "range" : {
                "IH_PT_DSC" : {
                    "gte": "2015-04-02",
                    "lte": "2015-04-02",
                    "format": "yyyy-MM-dd"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

{
    "constant_score": {
        "filter": {
            "range" : {
                "IH_PT_DSC" : {
                    "gte": "2015-04-01",
                    "lte": "2015-04-03",
                    "format": "yyyy-MM-dd"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,如果您需要查询不相交的日期间隔,只需使用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"
              }
            }
          }
        ]
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)