1

여러 문서를 업데이트하거나 삭제해야합니다. Elasticsearch로 여러 업데이트/삭제를 처리하는 방법은 무엇입니까?

I 업데이트

나는이 수행

  1. 처음 반환 된 결과에 큰 제한을 설정, 문서 검색을 (: 10000 크기의 말을하자).
  2. 반환 된 각 문서에 대해 특정 값을 수정합니다.
  3. 수정 된 전체 목록 (elastic index)을 elasticsearch에 다시 보내 왔습니다.

이 작업은 포인트 1이 더 이상 결과를 반환하지 않을 때까지 발생합니다.

내가 삭제할 때 나는이 작업을 수행 :

  1. 처음 반환 된 결과 (의 말을하자, 크기 : 10000)에 대한 더 큰 제한을 설정하면 문서를 검색 내가 모든 발견 문서로 보내 삭제
  2. elasticsearch_id 문서 (10000 요청)

이 작업은 포인트 1이 더 이상 결과를 반환하지 않을 때까지 반복됩니다.

업데이트하는 것이 올바른 방법입니까?

삭제할 때 여러 개의 ID를 한 번에 여러 개 보낼 수있는 방법이 있습니까?

답변

1

, 삭제 또는 ID로 갱신 당신이 대량 API를 사용하려는 경우 :

대량 API를

각 행의 형식은 다음이다

대량 API를 사용하면 단일 API 호출에서 많은 인덱스/삭제 작업 을 수행 할 수 있습니다. 이렇게하면 색인 생성 속도가 크게 빨라질 수 있습니다.

가능한 작업은 색인, 생성, 삭제 및 업데이트입니다. index와 create는 다음 줄에 소스를 기대하고 동일한 의미와 동일한 색인 및 유형을 가진 문서가 이미있는 경우 은 과 동일한 의미를 갖습니다. 반면 색인은 추가됩니다. 또는 필요에 따라 문서를 교체하십시오). 을 삭제하면 다음 행의 소스가 필요하지 않으며 표준 삭제 API와 동일한 의미를가집니다. 업데이트는 부분 doc, upsert 및 script와 그 옵션이 다음 줄에 지정 될 것으로 예상합니다.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-bulk.html

당신은 대신 쿼리에 의해 삭제할 수 있습니다

삭제하여 쿼리 API (가) 쿼리 API에 의해 삭제 하나 이상의 인덱스에서 문서를 삭제할 수 있습니다

및 쿼리에 기초한 하나 이상의 타입을 포함한다. 쿼리는 간단한 쿼리 문자열을 매개 변수로 사용하거나 요청 본문에 정의 된 Query DSL을 사용하여 을 제공 할 수 있습니다.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

+0

"쿼리 삭제"와 "대량 삭제"중에서 무엇을 권하고 싶습니다 (@ Tom83의 대답 참조)? 둘 다 사용 해본 적이 있습니까? –

+0

예, 둘 다 사용했습니다. 대량 삭제는 삭제하려는 문서 ID의 개별 목록이있는 경우에 더 유용합니다. 삭제하려는 모든 문서를 식별하는 단일 쿼리가있는 경우 쿼리로 삭제하는 것이 좋습니다. 언제나 그렇듯이 사용 방법은 사용 사례에 따라 다릅니다. –

+0

이 쿼리의 현재 버전 삭제에 대한 것이 확실하지 않지만 쿼리에서 현재 삭제가 스크롤 및 대량을 사용한다는 것을 알았으므로 이미 삭제할 ID 목록이있는 경우 대량 https ://www.elastic.co/guide/en/elasticsearch/plugins/2.2/delete-by-query-plugin-reason.html#_new_delete_by_query_implementation – dege

4

대량의 색인/업데이트 작업을 위해 이미 사용하고 있지 않은 경우 (확실하지 않은 경우) bulk api documentation을 살펴볼 수 있습니다. 그것은 이런 일에 맞춰져 있습니다.

작은 배치로 많은 문서를 검색하려면 from/size 대신 scan-scroll 검색을 사용해야합니다. 관련 정보는 here에서 찾을 수 있습니다.

요약하면 :

  • scroll API는 메모리에 결과를로드하고 효율적으로 반복 할 수 있도록 사용
  • scan 검색 유형 금지 비용 인 정렬

데이터 볼륨에 따라 배치 작업의 성능을 향상시킬 수 있습니다.

삭제 작업의 경우이 동일한 _bulk api를 사용하여 여러 번 삭제 작업을 한 번에 보낼 수 있습니다.삭제 및 업데이트에 대한

{ "delete" : { "_index" : "indexName", "_type" : "typeName", "_id" : "1" } } 
{ "delete" : { "_index" : "indexName", "_type" : "typeName", "_id" : "2" } } 
+0

업데이트가 결과를 반환하는 데 사용되는 필드의 값을 변경하기 때문에 내가 스캔 스크롤을 사용할 수 없습니다 것 같다. 그래서 항상 {from : 0}을 사용하고 "size"매개 변수 만 변경하여 요청을 줄입니다. 그러나 미래를 알면 좋습니다. 일괄 삭제는 제가 찾고있는 것입니다. "검색어 삭제"와 "일괄 삭제"사이에 무엇을 권하고 싶습니까? –

+0

하나의 쿼리와 일치하는 모든 문서를 삭제하려면 편리하게 쿼리로 삭제를 사용합니다. 첫 번째 단계는 건너 뛸 수 있습니다 (일치하는 문서의 모든 ID 검색). 나는 공연에 관해 모른다. – ThomasC

관련 문제