Elasticsearch 새로 고침

5681 단어 Elasticsearch
우리는 항상 이런 수요가 있다. Elasticsearch 데이터를 조작할 때 방금 조작한 데이터나 데이터 목록을 제때에 되돌려야 한다.
예를 들어 하나의 데이터를 저장한 후에 나는 바로 데이터의 총 갯수를 되돌려야 한다. 이때 문제가 발생한다. Elasticsearch는 조작 전의 데이터를 되돌려준다. 즉, 만약에 500개의 데이터가 나오기 시작하면 내가 하나를 삽입했다. 이치대로 말하면 501개가 될 것이다. 그러나 이때 조회하면 500개의 데이터만 발견되고 다시 요청하면 501개의 데이터를 얻는다. 이것은 어떻게 된 일입니까?
이 문제는 Elasticsearch가 지연되는 관계가 있기 때문이다.
Elasticsearch가 데이터를 조작한 후 바로 업데이트하는 방법은 쓰기, 업데이트, 삭제 후 바로 업데이트 데이터를 실행합니다. 설정.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);을 통해 가능합니다.
물론 Elasticsearch도 리셋 시간을 설정할 수 있지만 필요없습니다. 빈번한 리셋은 스트레스를 많이 받을 수 있습니다.
예는 다음과 같습니다.
업데이트 후 즉시 데이터 업데이트
 UpdateRequest request = new UpdateRequest(ES_INDEX, ES_TYPE, keyId).doc(body, XContentType.JSON);
 // 
 request.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
 UpdateResponse updateResponse = Proxy.getRestHighLevelClient(host).update(request);

대량 업데이트
 public BulkItemResponse[] esBulk(BulkRequest bulkRequest) throws IOException {
        long start = System.nanoTime();
        // 
        bulkRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
        BulkResponse updateResponse = Proxy.getRestHighLevelClient(host).bulk(bulkRequest);
        // 
        double milliSecondTime = ElapsedTimeUtil.getElapsedTime(start);
        Map<String, String> logTags = new HashMap<>();
        logger.info("bulkRequest", " :" + milliSecondTime + "/ms", logTags);
        BulkItemResponse[] responses = updateResponse.getItems();
        return responses;
    }

좋은 웹페이지 즐겨찾기