2013-03-14 2 views
4

ElasticSearch 색인을 검색 할 때 documentation에 따라 정렬을 적용 할 수 없습니다. 그러나이 과정에서 결과의 순서에 대한 정의가 있습니까? 그렇다면 예상 할 수 있습니까?신축성있는 검색 색인을 스캔/스크롤 할 때 예측 가능한 순서가 있습니까?

배경 정보 :

나는 regulary에 5M 문서에 대한 작업을 할 필요가

는 1.000 문서의 각 배치가 약 1 분을 복용 처리 할 수 ​​있습니다. 프로세스가 실행될 때마다 완료 될지 확신 할 수 없으므로 마지막으로 중단 된 작업을 선택하도록하고 싶습니다. 스크롤 결과가 ID으로 정렬 되었다면 (나는 알 수 있습니다.), 내 코드에서 마지막으로 처리 된 ID을 추적하고 다음 실행시 더 이상 모든 문서를 ID <= lastProcessedId으로 처리하지 않고 모든 문서 정기적으로 처리됩니다.

Btw : "문서 처리"는 색인에 추가 정보를 쓰는 것이 아니라 데이터베이스의 다른 것들을 업데이트하는 것을 의미합니다. 필자의 경우에는 타임 스탬프를 쓰는 것이 도움이되지 않을 것입니다. 왜냐하면 프로세스가 중단되는 이유 중 하나는 인덱스가 새로운 인덱스 (처음부터 다시 빌드 됨)로 대체 될 수 있기 때문입니다. 데이터베이스에 처리 된 타임 스탬프를 쓰는 것도 나에게 바람직한 옵션이 아닙니다. 반복 성능이 인덱스를 사용하여 처음부터 스크롤하는 이유입니다. ...

답변

4

아니요, 정렬 순서는 다음과 같습니다. 예측할 수 없다. 타임 스탬프 사용을 제안하려고했지만 나머지 질문을 읽었습니다.

스캔 된 검색을 "다시 시작 가능하게"만드는 유일한 방법은 문서를 타임 스탬프 나 일부 필드의 일부 필드로 나누는 것입니다. ID를 사용하고 범위 쿼리를 사용하여 한 번에 하나의 트렌치를 스크롤 할 수 있습니다.

+0

당신의 의견을 보내 주셔서 감사합니다 ... 나는 아마도 데이터베이스를 반복하는 것으로 되돌릴 것입니다. 왜냐하면 범위 쿼리를 수행 할 때 인덱스를 반복하는 것의 주된 이점 (초고속 반복)이 더 이상 적용되지 않기 때문입니다. – peterp