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
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? –
Können Sie auch die Ausgabe von 'GET/books /' bereitstellen? –
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. –