7

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

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

2 回答 2

3

您确实应该使用日期范围查询和格式参数(但如上一个答案中所述更简单)

确切日期

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

For Is any of date - 使用布尔过滤器并“应该”将不同的块放在一起

{
 "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"
      }
     }
    }
   }
  ]
 }
}
于 2016-10-18T12:44:50.453 回答
3

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

{
    "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"
              }
            }
          }
        ]
      }
    }
  }
}
于 2015-08-11T12:36:38.687 回答