2016-09-16 2 views
0

키 바나 센스에서 RESTful 명령을 사용하여 문서의 필드 및 중첩 된 객체를 수정하는 방법에 대한 Elastic manual on nested objects에서 예제를 찾을 수 없습니다. 나는 솔로우 atomic updates과 비슷한 것을 찾고 있는데, 이것은 문서의 특정 필드를 업데이트 할 수있게 해준다.탄성 찾기에서 중첩 된 객체 삭제/추가

키바 나 센스의 RESTful 명령은 어떻게 수행합니까? 내가 찾을 수있는 유일한 관련 정보는 Partial Updates to Documents에 있지만이 유스 케이스에는 어떻게 적용 할 수 있을지 모르겠다. 직선에서 예를 들어

, Elastic docs : 문서가 "1"처럼 보이도록

PUT my_index 
{ 
"mappings": { 
    "my_type": { 
    "properties": { 
     "user": { 
     "type": "nested" 
     } 
    } 
    } 
} 
} 

PUT my_index/my_type/1 
{ 
"group" : "fans", 
"user" : [ 
    { 
    "first" : "John", 
    "last" : "Smith" 
    }, 
    { 
    "first" : "Alice", 
    "last" : "White" 
    } 
] 
} 

가 어떻게, 중첩 된 객체에서 항목을 삭제할 수 있습니다

{ 
"group" : "fans", 
"user" : [ 
    { 
    "first" : "John", 
    "last" : "Smith" 
    } 
] 
} 

어떻게 할 수 중첩 된 객체에 항목을 추가하여 문서 "1"이 다음과 같이 보이도록합니다.

{ 
"group" : "fans", 
"user" : [ 
    { 
    "first" : "John", 
    "last" : "Smith" 
    }, 
    { 
    "first" : "Alice", 
    "last" : "White" 
    }, 
    { 
    "first" : "Peter", 
    "last" : "Parker" 
    } 
] 
} 

답변

0

나는 당신이 묻는 것을 오해하고, 당신은 당신이 원할 때마다 업데이트 된 문서 버전을 동일한 문서 id에 게시합니다.

는 중첩 된 문서 (또는 필드)을 삭제하려면 :

PUT my_index/my_type/1 
{ 
    "group" : "fans", 
    "user" : [ 
    { 
     "first" : "Alice", 
     "last" : "White" 
    } 
    ] 
} 

목록에 추가 사용자를 추가하려면 :

PUT my_index/my_type/1 
{ 
    "group" : "fans", 
    "user" : [ 
    { 
     "first" : "Alice", 
     "last" : "White" 
    }, 
    { 
     "first" : "Peter", 
     "last" : "Parker" 
    } 
    ] 
} 

참고 : Documents in elasticsearch are immutable합니다. 단일 필드를 변경하면 전체 문서의 색인이 다시 생성됩니다. 중첩 된 문서는 항상 부모 문서로 다시 색인화되므로 부모의 필드를 변경하면 중첩 된 문서 의 색인이 다시 생성됩니다. 중첩 된 문서가 크고 부모가 자주 변경되는 경우 성능 문제가 될 수 있습니다.

+0

중첩 된 "사용자"개체에서 추가 또는 삭제하고 새로운 (잠재적으로 큰) 문서를 다시 색인화하지 않으려합니다. Solrs "원자력 업데이트"와 비슷한 것을 찾고 있는데,이를 명확히하기 위해 질문을 업데이트했습니다. – tkja

+0

elasticsearch에서는 원하는 것을 선택할 수 없습니다. 문서는 변경할 수 없습니다. 내 대답을 조정하여 이에 대한 메모를 남겼습니다. 아마도 문서를 un-nest하고 몇몇 응용 프로그램 로직을 통해 링크하려고 할 것입니다. – Phil

+0

https://www.elastic.co/guide/en/elasticsearch/guide/master/partial-updates.html#_updates_and_conflicts (문서의 부분 업데이트)는 어떻게됩니까? 이 예에서와 같이 직접 갱신하는 RESTful 명령을 수행하는 데 사용할 수 있습니까? – tkja