Ich bin neu in Logstash und ElasticSearch. Ich möchte Logs lesen, die in ElasticSearch mit Spring Data (ElasticsearchRepository
) oder ElasticsearchTemplate
gespeichert sind.Abfrage ElasticSearch mit Spring
Ein Protokolleintrag in Elasticsearch sieht wie folgt aus:
{
"_index": "logstash-2016.08.19",
"_type": "logs",
"_id": "AVagGzQ4GS5SuLe66qxR",
"_score": 1.0,
"_source": {
"message": "Aug 19, 2016 12:02:32 AM com.example.server.MOM$2 handleDelivery\n",
"@version": "1",
"@timestamp": "2016-08-19T00:02:32.000Z",
"host": "10.x.x.x",
"priority": 11,
"timestamp8601": "2016-08-19T00:02:32Z",
"logsource": "a094b35d71da",
"program": "xxx-router_1",
"pid": "2424",
"severity": 3,
"facility": 1,
"timestamp": "2016-08-19T00:02:32Z",
"facility_label": "user-level",
"severity_label": "Error"
}
}
Basierend auf den JSON-Daten des Protokolleintrags, habe ich die folgenden Java-Klassen erstellt:
@Document(indexName = "logstash-2016.08.19")
public class Logstash {
@Id
private String _id;
private String _index;
private String _type;
private Integer _score;
private Source _source;
/* getters & setters */
}
und
public class Source {
private String message;
private String host;
private Integer priority;
private String timestamp8601;
private String logsource;
private String program;
private String pid;
private Integer severity;
private Integer facility;
private String facility_label;
private String severity_label;
/* getters & setters */
}
Dann versuche ich die Daten abzufragen ... In diesem Beispiel versuche ich das Protokoll mit der angegebenen ID zu bekommen. Ich habe verschiedene Kombinationen der Abfrage ausprobiert, aber alles, was ich bekomme, ist ein leeres Objekt oder Array. Nie geschafft, ein echtes Objekt zurück zu bekommen ... Außerdem habe ich Spring's ElasticsearchRepository
ohne Erfolg versucht.
@RestController
public class TestController {
@Autowired
ElasticsearchTemplate elt;
@RequestMapping(value = "/e", method = RequestMethod.GET)
public List<Logstash> elasticSearch() {
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
.withFilter(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("_id", "AVagGzQ4GS5SuLe66qxR")))
.build();
return elt.queryForList(searchQuery, Logstash.class);
}
}
Jede Hilfe ist willkommen =)
Vielen Dank für Ihre Antwort, aber ich ein leeres Array noch zurück. :-( – Daniel
Wenn ich weitere Informationen zur Lösung dieses Problems bereitstellen kann, lassen Sie es mich bitte wissen. Dies ist mein zweiter Tag, an dem ich Elasticsearch verwende. Daher ist mein Überblick etwas eingeschränkt. – Daniel
Was passiert, wenn Sie '' withFilter() 'entfernen? Aufruf? – Val