나는 아주 간단한 질문이 있습니다.탄성 검색 검색 시간 일관성
나는 1600000 개의 비교적 큰 문서를 포함하는 elasticsearch 색인을 가지고 있으며, 색인을 스캔하여 고전적인 SQL 데이터베이스와 동기화해야합니다.
내 문서에는 SQL ID와 타임 스탬프가 포함됩니다.
SQL 데이터베이스와 탄성 색인을 동기화하려면 간단히 행과 문서를 순차적으로 읽습니다 (ID로 정렬 됨). ID를 비교하면 문서를 삭제해야하는지 (비교가 음수인지) 확인할 수 있습니다. SQL 행 (비교 긍정적 인) 새 문서, 그리고 비교가 0이면 내가 문서를 업데이 트 해야하는지 알고 타임 스탬프를 비교하십시오.
나는 작동하지만 나는 문서를 읽는 것이 내가 미리 읽는 것을 훨씬 느리게한다는 것을 관찰한다.
{
"from" : 0, "size" : 10000,
"fields" : ["idannonce","ts"],
"sort" : ["idannonce"],
"query" : "match_all" {}
}
이 간단한 쿼리 할 때 "에서 많은 느린 :
나는 이런 식으로 뭔가를 요청 필드"에서 "때마다 이동, 인덱스에 검색을 반복하여 덩어리에서 내 문서를 검색 "이 0 일 때보다 1000000입니다.
이 정상적인 동작입니까? "idannonce"필드를 인덱싱해야하는 것과 대략 같은 시간이 걸릴 것이라고 생각했습니다.
의견이 있으십니까? 일정한 시간에 실행되도록 동일한 쿼리를 작성하는 방법이 있습니까?
감사합니다.
나는 Scroll API를 사용하고 싶지만, 슬프게도 정렬은 지원하지 않는다. 검색 API를 사용하여 문서를 IDannonce별로 정렬 할 수 있습니다. 또한, 동기화 과정이 두 단계로 실행되므로 삽입/삭제가 누락되지 않습니다. 먼저 ID와 타임 스탬프를 사용하여 SQL DB와 탄성 인덱스 사이의 델타를 결정한 다음 SQL에서 델타에 대한 전체 데이터를 검색하고 필요에 따라 내 문서를 삽입/업데이트/삭제합니다. 이제 "from"이 높을 때 내 쿼리가 더 느리게 실행되는 이유를 이해할 수 없습니다. 어떤 생각? –
스크롤은 일반적으로 정렬 검색을 지원하지 않는 검색 검색 유형과 함께 사용됩니다. 그러나 스크롤을 다른 검색 유형과 함께 사용할 수도 있습니다. 정렬하지 않고 모든 ID를 먼저 가져온 다음 클라이언트에서 정렬하는 것이 더 효율적일 수 있습니다. 속도 저하에 대한 질문에 대답하려면 elasticsearh가 더 많은 작업을 수행해야하기 때문에 더 많은 페이지를 검색하는 것이 더 느립니다. 색인이 여러 개의 조각으로 나뉘어져 있습니다. 맞습니까? 이제 서로 다른 노드에 5 개의 정렬 된 목록이 있으며 결합 된 목록에서 999,990에서 1,000,000까지 레코드를 가져와야한다고 생각해보십시오. 어떻게 할 건데? – imotov
대단히 감사합니다. 검색 이외의 다른 검색 유형에서 Scroll API를 사용할 수 있다는 것을 몰랐습니다. 아마 다음주에 시도해 볼 것입니다. 지금은 범위 쿼리로 전환했습니다. 마지막으로 찾은 ID를 기억하고이 ID에서 검색을 다시 시작합니다. 이것은 너무 느리지 만 스크롤이 더 빠를 것이라고는 생각하지 않습니다. –