【问题标题】:Searching Date Field value in ElasticSearch without time在没有时间的情况下在 ElasticSearch 中搜索日期字段值
【发布时间】:2016-10-18 20:44:50
【问题描述】:

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

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

【问题讨论】:

    标签: elasticsearch elasticsearch-net


    【解决方案1】:

    您可以为此使用range filter,方法是在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"
                  }
                }
              }
            ]
          }
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

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

      具体日期

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-11
        • 2015-12-16
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        相关资源
        最近更新 更多