2015-08-11 14 views
5

ich in meinen Daten ein Datumsfeld habe alsSuche Datum Feldwert in Elasticsearch ohne Zeit

"type": "date", 
"format": "dateOptionalTime" 

Jetzt Mein Datum Feld und Wert ist -

"INITIAL_EXTRACT_DATE" : "2015-04-02T06:47:57.78+05:30" 

Während die Suche mir basierend auf nur am searching Datum, das "2015-04-02" ist. aber ich bekomme 0 Ergebnis.

Kann jemand vorschlagen, wie man genaues Datum sucht und irgendein Datum ist.

Jetzt versuche ich mit diesem -

Für Genaues Datum -

"term": { 
      "IH_PT_DSC": { 
      "value": "2015-04-02" 
      } 
     } 

Für Ist jeder Tag - ein range filter für diese

"terms": { 
     "IH_PT_DSC": [ 
      "2015-04-02", 
      "2015-04-03", 
      "2015-04-03" 
     ] 
     } 

Antwort

3

Sie verwenden können unter Verwendung desselben Datums in gte/lte und ein format Parameter, wo Sie nur den Datumsteil angeben Lassen Sie den Zeitteil aus)

{ 
    "constant_score": { 
     "filter": { 
      "range" : { 
       "IH_PT_DSC" : { 
        "gte": "2015-04-02", 
        "lte": "2015-04-02", 
        "format": "yyyy-MM-dd" 
       } 
      } 
     } 
    } 
} 

Wenn Sie mehrere Daten angeben müssen, können Sie dies auch leicht tun.

{ 
    "constant_score": { 
     "filter": { 
      "range" : { 
       "IH_PT_DSC" : { 
        "gte": "2015-04-01", 
        "lte": "2015-04-03", 
        "format": "yyyy-MM-dd" 
       } 
      } 
     } 
    } 
} 

Schließlich, wenn Sie disjoint Datumsintervalle abfragen müssen, verwenden Sie einfach einen bool/should Filter:

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

Sie in der Tat ein date range query und einen Formatparameter (aber viel einfacher in der wie erläutert verwenden sollten vorherige Antwort)

Für Genaues Datum

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

Für Ist ein Datum - einen boolean Filter verwenden, und "sollte" die verschiedenen Blöcke zusammen

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