2017-09-17 1 views
0

Ich möchte Dokumente aus den letzten 30 Tagen in elastische Suche erhalten, aber es leer zurückgibt.Abfrage auf einen Datumsbereich in elasticsearch

es ist mein Mapping:

PUT /books 
{ 
    "mappings": { 
     "impressions": { 
      "properties": { 

       "booksCreated" : { 
        "type": "date", 
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis", 
        "index": true 

       } 
      } 
     } 
    } 
} 

und es ist meine Frage:

POST /books/_search?size=0 
{ 
    "aggs": { 
     "range": { 
      "date_range": { 
       "field": "booksCreated", 
       "format": "yyyy-MM-dd", 
       "ranges": [ 
        { "to": "now" }, 
        { "from": "now-1M/M" } 
       ] 
      } 
     } 
    } 
} 

Ich habe alle Möglichkeiten versucht, aber es gibt leer.

, aber ich kann auf @timestamp Feld

das Problem Abfrage ist, dass logstash den Feldtyp von Datum Zeichenfolge ändert. mein json ist:

{ 
    "index":"books", 
    "type":"book", 
    "body":{ 
    "impressions":{ 
    "_source":{ 
    "enabled":true 
    }, 
    "properties":{ 
    "BookCreated":"2017-09-18 12:18:39" 
    } 
    } 
    } 
} 

und meine logstash config:

input { 
    file { 
     path => "E:\data2\log\logstash.log" 
     start_position => "beginning" 
     sincedb_path => "/dev/null" 
     codec => json 
    } 
} 

filter { 
    mutate { 
     strip => ["message"] 
    } 
} 

output { 
    elasticsearch { 
     hosts => "localhost" 
     index => "books" 
     document_type => "book"   
    } 

} 

i die json in eine Protokolldatei protokolliert, und sie logstash senden

nach der Zugabe von json die Zuordnung chasnges dazu Elasticsearch :

{ 
    "Books": { 
    "mappings": { 
     "Books": { 
     "properties": { 
      "@timestamp": { 
      "type": "date" 
      }, 
      "@version": { 
      "type": "text", 
      "fields": { 
       "keyword": { 
       "type": "keyword", 
       "ignore_above": 256 
       } 
      } 
      }, 
      "BookCreated": { 
      "type": "date", 
      "format": "yyyy-MM-dd HH:mm:ss" 
      }, 
      "body": { 
      "properties": { 
       "Books": { 
       "properties": { 
        "_source": { 
        "properties": { 
         "enabled": { 
         "type": "boolean" 
         } 
        } 
        }, 
        "properties": { 
        "properties": { 
         "BookCreated": { 
         "type": "text", 
         "fields": { 
          "keyword": { 
          "type": "keyword", 
          "ignore_above": 256 
          } 
         } 
         } 
        } 
        } 
       } 
       } 
      } 
      }, 
      "host": { 
      "type": "text", 
      "fields": { 
       "keyword": { 
       "type": "keyword", 
       "ignore_above": 256 
       } 
      } 
      }, 
      "index": { 
      "type": "text", 
      "fields": { 
       "keyword": { 
       "type": "keyword", 
       "ignore_above": 256 
       } 
      } 
      }, 
      "path": { 
      "type": "text", 
      "fields": { 
       "keyword": { 
       "type": "keyword", 
       "ignore_above": 256 
       } 
      } 
      }, 
      "type": { 
      "type": "text", 
      "fields": { 
       "keyword": { 
       "type": "keyword", 
       "ignore_above": 256 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

es hat zwei BookCreated ein isdate und der andere Text

+0

Mögen Sie bitte die gesamte Ausgabe der Abfrage hinzufügen? Wie viele Dokumente haben Sie in der Sammlung? Benötigen Sie passende Dokumente selbst oder die Anzahl der Dokumente das Datumsintervall in der Query? –

+0

Können Sie auch die Ausgabe von 'GET/books /' bereitstellen? –

+0

Ich fand das Problem, bu ich kann das nicht lösen ... ich füge Mapping hinzu, aber wenn ich Dokumente vom Protokoll zum elastischen schicke, ändert es den Typ von Datum zu Text. es wird das falsche Feld berücksichtigen. Ich werde die JSON hinzufügen, die protokolliert werden und meine Logstash Config-Datei auf meine Frage. –

Antwort

0

Sie benötigen from und to im gleichen Bereich zu setzen, wie folgt aus:

POST /books/_search?size=0 
{ 
    "aggs": { 
     "range": { 
      "date_range": { 
       "field": "BookCreated", 
       "format": "yyyy-MM-dd", 
       "ranges": [ 
        { 
         "from": "now-1M/M", 
         "to": "now" 
        } 
       ] 
      } 
     } 
    } 
} 
+0

wieder gibt es leer für Treffer –

+0

Können Sie ein Dokument anzeigen, das übereinstimmen sollte? – Val

+0

Ihr Datumsfeld heißt "BookCreated" und nicht "booksCreated". Ich habe meine Antwort aktualisiert. Bitte versuche es erneut. – Val

Verwandte Themen