java - 자바 - 인덱싱되지 않은 필드의 부분 업데이트



엘라스틱서치 자바 예제 (1)

다음 상황을 고려해 봅시다. "article"문서에는 content (문자열) 및 views (int)의 두 필드가 있습니다. 보기 필드는 색인되지 않습니다. 보기 필드에는이 기사를 읽은 횟수에 대한 정보가 들어 있습니다.

공식 문서에서 :

우리는 또한 문서가 변경 불가능하다고 말했습니다. 문서는 변경 될 수 없으며 대체 될 수만 있습니다. 업데이트 API는 동일한 규칙을 따라야합니다. 외부 적으로는 문서를 부분적으로 업데이트하는 것처럼 보입니다. 그러나 내부적으로 업데이트 API는 이미 설명한 것과 동일한 검색 - 변경 재 색인 프로세스 만 관리합니다.

그러나 색인화되지 않은 필드를 부분적으로 업데이트하면 전체 문서를 다시 색인화 할 수 있습니까? 예를 들어 누군가가 기사를 읽을 때마다보기를 업데이트하고 싶습니다. 전체 문서가 다시 색인화되면 실시간 업데이트를 수행 할 수 없습니다 (너무 무거운 작업이므로). 따라서 지연과 함께 작업해야합니다. 예를 들어 방문자가 매 3-5-10 분마다 읽은 모든 기사를 업데이트하십시오. 아니면 내가 잘못 알고있어?


그러나 색인화되지 않은 필드를 부분적으로 업데이트하면 전체 문서를 다시 색인화 할 수 있습니까?

예, views 필드는 개별적으로 인덱싱되지 않지만 _source 필드의 일부입니다. _source 필드에는 문서를 색인 할 때 Elasticsearch에 보낸 원본 JSON이 포함되어 있으며 검색 중에 문서에 일치하는 항목이 있으면 결과에 반환됩니다. _source 필드는 Lucene의 문서로 인덱싱됩니다. 업데이트 스크립트에서 _source 필드를 변경하면 전체 문서가 다시 색인화됩니다.

다음 전략을 평가 해 주시겠습니까? 누군가가 기사를 읽을 때마다 탄력성에 대한 업데이트를 보냅니다. 그러나 refresh_interval은 30 초로 설정되었습니다. 30 초 간격으로 약 1000 명의 사용자가 기사 하나를 읽으면이 전략이 정상적으로 작동합니까?

여전히 1000 개의 문서를 색인하고 있으며, 1 개의 문서는 현재 문서로 색인됩니다. 999 개의 문서는 다음 Lucene 병합 중에 색인에서 삭제 된 것으로 표시되고 색인에서 제거됩니다.





elasticsearch