Поиск значения поля даты в ElasticSearch без учета времени

У меня есть одно поле даты в моих данных как

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

person Mukesh    schedule 11.08.2015    source источник


Ответы (2)


Вы можете использовать range фильтр для этого, используя ту же дату в gte / 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"
              }
            }
          }
        ]
      }
    }
  }
}
person Val    schedule 11.08.2015

Вам действительно следует использовать запрос диапазона дат и параметр формата (но намного проще, как объяснялось в предыдущем ответе)

Точная дата

{
 "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"
      }
     }
    }
   }
  ]
 }
}
person Roeland Van Heddegem    schedule 18.10.2016