elasticsearch 2.2.0을 기본 클러스터 구성으로 사용하고 있습니다. 스프링 데이터 elasticsearch를 사용하여 스캔 및 스크롤 쿼리에 문제가 발생했습니다. 내가 쿼리를 실행하면이 같은 오류가 발생합니다 :Elasticsearch Spring 데이터 Elasticsearch를 사용하는 'scan & scroll'쿼리 중 SearchContextMissingException
는[2016-06-29 12:45:52,046][DEBUG][action.search.type ] [Vector] [155597] Failed to execute query phase
RemoteTransportException[[Vector][10.132.47.95:9300][indices:data/read/search[phase/scan/scroll]]]; nested: SearchContextMissingException[No search context found for id [155597]];
Caused by: SearchContextMissingException[No search context found for id [155597]]
at org.elasticsearch.search.SearchService.findContext(SearchService.java:611)
at org.elasticsearch.search.SearchService.executeScan(SearchService.java:311)
at org.elasticsearch.search.action.SearchServiceTransportAction$SearchScanScrollTransportHandler.messageReceived(SearchServiceTransportAction.java:433)
at org.elasticsearch.search.action.SearchServiceTransportAction$SearchScanScrollTransportHandler.messageReceived(SearchServiceTransportAction.java:430)
at org.elasticsearch.transport.TransportService$4.doRun(TransportService.java:350)
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
내 '스캔 & 스크롤'코드 :
public List<T> getAllElements(SearchQuery searchQuery) {
searchQuery.setPageable(new PageRequest(0, PAGE_SIZE));
String scrollId = elasticsearchTemplate.scan(searchQuery, 1000, false);
List<T> allElements = new LinkedList<>();
boolean hasRecords = true;
while (hasRecords) {
Page<T> page = elasticsearchTemplate.scroll(scrollId, 5000, resultMapper);
if (page.hasContent()) {
allElements.addAll(page.getContent());
} else {
hasRecords = false;
}
}
elasticsearchTemplate.clearScroll(scrollId);
return allElements;
}
내 질의 결과 크기가 PAGE_SIZE 매개 변수보다 작은,이 같은 다음 오류가 다섯 발생 타임스. 나는 그것이 하나의 조각이라고 생각한다. 결과 크기가 PAGE_SIZE보다 크면 오류가 몇 번 발생합니다. 전화를 걸지 않기 위해 코드를 리팩토링하려고했습니다.
Page<T> page = elasticsearchTemplate.scroll(scrollId, 5000, resultMapper);
페이지에 내용이 없다고 확신 할 때. 그러나 PAGE_SIZE가 쿼리 결과보다 큰 경우에만 작동하므로 전혀 해결책이 아닙니다.
나는 elasticsearch 측에서만 문제가 있다는 것을 추가해야합니다. 클라이언트 쪽에서는 오류가 숨겨지고 각 경우에 쿼리 결과가 정확합니다. 아무도이 문제의 원인을 알고 있습니까?
감사합니다.
사이먼.
답변 주셔서 감사합니다.하지만 이전에 시도했지만 제 경우에는 작동하지 않습니다. 샘플 쿼리는 매우 간단하며 1 초도 걸리지 않으므로 문제가 될 수 없습니다. – esnosek
확신하고 싶다면,'org.elasticsearch.search.SearchService'에서 DEBUG 로그를 가능하게 할 수 있습니다. 그리고'freeing search context ....'디버그 로그를 볼 수 있다면 이것은 문제입니다. – Val
시도해 주셔서 감사합니다.하지만 해당 클래스에서 DEBUG 로그를 활성화 한 후에는 아무 것도 변경되지 않았습니다. 오류 로그는 이전과 동일합니다. – esnosek