2017-10-16 2 views
0

나는 elasticsearch를 처음 사용하기에 기술적으로 어려움이 있습니다. 현재 시간별 인덱스에 저장되어있는 문서는 시계열 데이터입니다. 내가 알아 내려고 노력하는 것은 효율적으로 으로 정의 된 key 필드 값만 추출하는 방법입니다. 나는 모든 인덱스를 스크롤하면서 필드를 추출하는 순진한 방법을 처음에 시도했지만 분명히 그렇게 빨리 끝나지는 않는다. 매 시간마다 인덱스가 약 10M이고 스크롤하는 3 개의 인덱스는 이미 오래 걸린다.탄성 검색을 위해 문서의 한 필드 만 효율적으로 얻는 방법

는 그럼, terms aggregations에 온 집계 용어로 key 필드를 만들려고 :

"aggregations": { 
    "test_group": { 
     "terms": { 
     "field": "key", 
     "size": 100000 
     } 
    } 
    } 

사용자가 역사를 검색하려고 나를 더 나은 성능을하지만 여전히 실시간 시스템으로 충분하지를 제공합니다 key은 높은 카디널리티 필드이기 때문입니다. 나는 전체 응답에 적지 않은 시간을 추가하는 몇 가지 처리, 출력을 구문 분석 할 elastic search go library을 사용하고 있기 때문에

size = 50k, indices = 4, time range = 3hrs: 7.1s 
size = 100k, indices = 4, time range = 3hrs: 7.669s 
size = 1m, indices = 4, time range = 2hrs: 12.669s 
size = 1m, indices = 4, time range = 3hrs: 14.669s 

이, 그것의 끝이 아니다 : 일부 거친 벤치 마크는 나에게 말했다.

내 질문은 : 이것은 이미 최고의 ES가 할 수있는 일입니까? 내가 누락 된 다른 방법이 있습니까? 저는 현재 ES 5.6과 클러스터 노드 3 개를 사용하고 있는데, 모두 Amazon i3-4xl 인스턴스를 사용하고 있습니다. 감사.

답변

0

정확하게 질문을 이해하면 문서에서 '키'라는 특정 필드를 검색하려고하는데 걱정하지 않는 문서의 다른 필드가 있다고 가정합니다.

그렇다면,이 시도 :

GET /_search 
{ 
    "_source": { 
     "includes": ["key"] 
    } 
} 
+0

나는 그렇게 생각하지 않습니다. 첫 번째로'scroll'을 사용하는 이유는 ES가'query'를 사용하여 큰 데이터 셋을 쿼리하는 것을 권장하지 않기 때문입니다. yaml 파일을 통해 한도를 변경할 수 있다고해도, 마지막 옵션으로 일반 쿼리를 사용하기 전에 다른 옵션을 찾아야합니다. –

관련 문제