2014-01-17 3 views
0

나는 1 년 동안 성공적으로 elasticsearch를 사용하여 수백만 개의 문서를로드하고 다양한 쿼리와 패싯을 데이터에 대해 실행했습니다.elasticsearch에서 문서를 업데이트하는 효율

나는 최근에 일부 사용자로부터 '문서를 읽음으로 표시'할 수 있는지 묻는 메시지가 표시되어 검색 결과에서 제외 될 수 있습니다.

문제없이 성공적으로 구현했지만 지금은 최상의 구현을 선택했는지 궁금합니다. 나의 이해는 ES (또는 모든 lucene 구현)에서 문서를 업데이트하는 것이 삭제 및 재 인덱싱과 동일하다는 것입니다.

lucene/ES 커뮤니티에 대한 내 질문 ... 사용자 중심의 임시 작업으로 문서를 업데이트 한 결과 부정적인 영향을 미칠 수 있습니까? (그리고 당신은 대안을 제안 할 수 있습니다?)

감사합니다, JayTee를

답변

1

예, 다시 색인에 대한 성능 오버 헤드가있을 것입니다. 이것은 http://www.elasticsearch.org/blog/managing-relations-inside-elasticsearch/에 "무시할 수없는"것으로 주어집니다 (여기에서는 중첩 된 문서에 대해 이야기하지만 중첩 필드가없는 문서는 동일합니다)

"데이터가 자주 변경되면 중첩 된 문서 색인화에 관련된 무시할 오버 헤드를 가질 수있다 "는 대체가 해당 문서에서 후술되는

- 즉 부모/자식

."부모/자식 두 문서를 분리하는 단지 느슨하게 결합함으로써 이러한 제한을 제거 ... 부모 나 다른 자녀에게 아무런 영향을 미치지 않기 때문에 자녀 문서를 업데이트/삭제하는 것이 더 자유 로움을 의미합니다.

단점은 ... (쿼리) .. 동일한 Lucene 블록에 동일 지역에 있지 않기 때문에 매우 빠르지 않습니다. "

따라서 모든 의사가" 읽기 "- 전체 데이터 저장소를 다시 인덱싱하는 오버 헤드가 발생합니다. 시간이 지남에 천천히 일어날 경우 아키텍처에서 처리 할 수 ​​있습니다.

많은 수의 문서를 읽음으로 표시 할 수 있고 시스템에 큰 부하를 발생시킬 염려가있는 경우 읽기 필드에 상위 하위 관계를 사용할 수 있습니다. 그러나 쿼리를 실행하는 데 추가 오버 헤드가 있습니다. "자식 필드 '읽기'가 false 인 문서 만 제공하십시오.

+0

멋진 조언을 주셔서 감사합니다. 부모/아이를 살펴 보겠습니다. – JayTee

관련 문제