2016-08-19 2 views
0

Я новичок в Logstash и ElasticSearch. Я хотел бы прочитать журналы, которые сохраняются в ElasticSearch с использованием данных Spring (ElasticsearchRepository) или ElasticsearchTemplate.Запрос ElasticSearch с использованием Spring

Запись журнала в Elasticsearch выглядит следующим образом:

{ 
    "_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" 
    } 
} 

На основе JSON данных записи журнала, я создал следующие классы Java:

@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 */ 
} 

и

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 */ 

} 

Затем я пытаюсь запросить данные ... В этом примере я пытаюсь получить журнал с указанным ID. Я пробовал различные комбинации запроса, но все, что я получаю, это пустой объект или массив. Никогда не удалось вернуть реальный объект ... Кроме того, я пробовал Spring ElasticsearchRepository без успеха.

@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); 
    } 

} 

Любая помощь приветствуется =)

ответ

1

Вы не должны сопоставить поля, начинающиеся с символа подчеркивания, но только то, что в источнике.

Ваш Logstash класс должен быть просто нравится эта

@Document(indexName = "logstash-2016.08.19") 
public class Logstash { 
    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 */ 
} 
+0

Спасибо за ваш ответ, но я все еще получаю пустой массив обратно. :-( – Daniel

+0

Если я могу предоставить любую дополнительную информацию для решения этой проблемы, пожалуйста, дайте мне знать. Это мой второй день, когда я использую Elasticsearch. Поэтому мой обзор немного ограничен. – Daniel

+0

Что делать, если вы удалите 'withFilter()' вызов? – Val

Смежные вопросы