'Elasticsearch search by time range

Trying to search based on date and time separately, elastic-search document format is,

{
"id": "101",
"name": "Tom",
"customers": ["Jerry", "Nancy", "soli"],
"start_time": "2021-12-13T06:57:29.420198Z",
"end_time": "2021-12-13T07:00:23.511722Z",
}

I need to search based on date and time separately, Ex:

 {  
 "query": {
    "bool" : {
      "must" : [
         {
          "match" : { "customers" : "Jerry" }
         },
        {
        "range": { 
           "start_time": {"gte" : "2021-12-13",  "lte" : "2021-12-15" }} 
         }
       ]}
     }
  }

o/p: I am getting the above doc as the result which is expected.

but when I use the below query, then I am getting errors, "failed to parse date field [6:57:29] with format [strict_date_optional_time||epoch_millis]: [failed to parse date field [6:57:29] with format [strict_date_optional_time||epoch_millis]]"

 {  
  "query": {
      "bool" : {
      "must" : [
          {
            "match" : { "customers" : "Jerry" }
          },
          {
         "range": { 
            "start_time": {"gte" : "6:57:29",  "lte" : "6:59:35" }} 
          }
       ]}
     }
  }

Why I am not able to get the result based on time? is there any idea to achieve a search based on both date and time with the single field?

Ex:

  {  
   "query": {
      "bool" : {
      "must" : [
          {
            "match" : { "customers" : "Jerry" }
          },
         {
         "range": { 
            "start_time": {"gte" : "2021-12-13",  "lte" : "2021-12-15" }} 
         },
         {
         "range": { 
            "start_time": {"gte" : "6:57:29",  "lte" : "6:59:35" }} 
         }
      ]}
    }
  }

I also tried to achieve this using regular expressions, but it didn't help me.

This is the mapping,

{
 "settings": {
        "number_of_shards": 2,
        "number_of_replicas": 1
   },
    "mappings": {
    "dynamic": "true",
    "_source": {
       "enabled": "true"
        },
     "runtime": {
     "start_time": {
       "type": "keyword",
        "script": {
           "source": "doc.start_time.start_time.getHourOfDay() >= 
           params.min && doc.start_time.start_time.getHourOfDay() 
           <= params.max"
            }
         }
       },
       "properties": {
        "name": {
            "type": "keyword"
           },
          "customers": {
          "type": "text"
         }
      }
    }
  }

Above statement gives error ==> "not a statement: result not used from boolean and operation [&&]"

This is the search query,which I'll try once the index will be created,

   {
    "query": {
       "bool" : {
          "must" : [
            {
               "match" : { "customers" : "Jerry" }
            },
            {
               "match" : { "name" : "Tom" }
            },
            {
            "range": {
               "start_time": {
               "gte": "2015-11-01",
               "lte": "2015-11-30"
                     }
                 }
             },

            {
                   "script": {
                      "source": 
                        "doc.start_time.start_time.getHourOfDay() 
         >= params.min && 
        doc.start_time.start_time.getHourOfDay() <= params.max",
                     "params": {
                     "min": 6,
                     "max": 7
                     }
                   }
              }
          ]}
        }
     }


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source