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