0

elasticsearch 2.3.4를 실행 중이지만 구문이 5.x에서 변경되지 않은 것 같습니다.Elasticsearch Multi 곱슬 곱슬 함으로 작업 할 수 있지만 Java API를 통해 결과가 반환되지 않습니다.

Multiget over curl 잘 작동합니다.

curl 'localhost:9200/_mget' -d '{ 
    "docs" : [ 
     { 
      "_index" : "logs-2017-04-30", 
      "_id" : "e72927c2-751c-4b33-86de-44a494abf78f", 
      "fields" : ["message"] 
     } 
    ] 
}' 

위의 쿼리의 두 로그를 반환 :

curl 'localhost:9200/_mget' -d '{ 
    "docs" : [ 
     { 
      "_index" : "logs-2017-04-30", 
      "_id" : "e72927c2-751c-4b33-86de-44a494abf78f" 
     } 
    ] 
}' 

그리고는 "메시지"를 끌어 할 때 응답을 필드 오프, 나는이 요청을 사용 : 여기 내 컬의 모습입니다 그리고 내가 찾고있는 정보. 나는이 같은 자바로 번역 할 때

는하지만 :

MultiGetRequestBuilder request = client.prepareMultiGet(); 
request.add("logs-2017-04-30", null, "e72927c2-751c-4b33-86de-44a494abf78f"); 
MultiGetResponse mGetResponse = request.get(); 
for (MultiGetItemResponse itemResponse : mGetResponse.getResponses()) { 
    GetResponse response = itemResponse.getResponse(); 
    logger.debug("Outputing object: " + ToStringBuilder.reflectionToString(response)); 
} 

는 내가 다시 널 (null) 오브젝트를 받고있는 것으로 나타납니다. ---

GetField field = response.getField("message"); < null를 돌려 내가 잘못 뭐하는 거지

: 내가 널보고하는 GetResponse 객체 오프 메시지 필드를 잡아하려고하면 아무것도 없다? elasticsearch에 대한 나머지 호출을 수행하면 로그가 존재 함을 증명하지만 Java 호출은 어떻게 든 잘못됩니다.

+0

가 null ("로그-2017년 4월 30일을"request.add, "e72927c2-751c-4b33-86de -44a494abf78f ")'? 타입이나'_all'을 제공해야합니다! – avr

+0

@avr API는 null을 허용합니다. https://github.com/elastic/elasticsearch/blob/master/core/src/main/java/org/elasticsearch/action/get/MultiGetRequestBuilder.java#L47, 하지만 다시 돌아가서 curl 명령과 Java MultiGetRequestBuilder.add 명령에 유형을 추가하고 동일한 동작을 보았습니다. 그것은 curl 호출에서 작동하고 Java 호출에서 실패했습니다. – Shadoninja

답변

0

documentation page for the Java multi get은 _source 필드 이외의 데이터를 검색하는 데 필요한 추가 구문을 완전히 건너 뜁니다. REST API와 마찬가지로 로그를 찾는 데 필요한 최소 정보가있는 멀티 가져 오기를 수행하면 에 대한 정보가 매우 제한적입니다.. Java API를 통해 다중 수신 호출의 로그에서 특정 필드를 가져 오려면 MultiGetRequest.Item을 빌더에 전달해야합니다. 이 항목에는 요청을 실행하기 전에 지정된 필드가 있어야합니다.

MultiGetRequestBuilder request = client.prepareMultiGet(); 
MultiGetRequest.Item item = new MultiGetRequest.Item("logs-2017-04-30", "null", "e72927c2-751c-4b33-86de-44a494abf78f"); 
item.fields("message"); 
request.add(item); 
MultiGetResponse mGetResponse = request.get(); 

지금 내가 이전에 지정한 필드를 요청하실 수 있습니다 : 나는 쿼리를 할 때 여기에

내가 존재 할 필드에 결과 코드 변경 (선명도 여러 행으로 분할)이다 : 왜`라인에서 자바 요청에`null``로 type`을주고있다

GetField field = response.getField("message");