2016-08-19 2 views
0

Logstash 및 ElasticSearch를 처음 사용했습니다. 스프링 데이터 (ElasticsearchRepository) 또는 ElasticsearchTemplate을 사용하여 ElasticSearch에 저장된 로그를 읽으 려합니다.Spring을 사용한 ElasticSearch 쿼리

는 Elasticsearch에서 로그 항목은 다음과 같습니다

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

} 
: 로그 항목의 JSON 데이터를 바탕으로
{ 
    "_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" 
    } 
} 

, 나는 다음과 같은 자바 클래스를 생성

그런 다음 데이터를 쿼리하려고합니다.이 예제에서는 지정된 ID로 로그를 가져옵니다. 내가 쿼리의 다양한 조합을 시도했지만, 내가 얻을 수있는 모든 빈 개체 또는 배열입니다. 실제 물체를 되 찾으려하지 않았습니다 ... 또한 스프링의 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

감사처럼해야하지만, 난 여전히 빈 상태 (empty)의 배열을 다시 얻을. :-( – Daniel

+0

이 문제를 해결하기 위해 추가 정보를 제공 할 수 있다면 알려주십시오.이 두 번째 날은 내가 Elasticsearch를 사용하고 있기 때문에 제 개요가 약간 제한적입니다 .. – Daniel

+0

'withFilter()' 호출? – Val