Elastic Search - 문서!
문서 CRUD
문서 조회
문서조회는 아래와 같이 id 를 기반으로 단건조회할 수 있다.
1 | GET /movie/_doc/1 |
질의문을 통한 검색은 아래 검색쿼리 항목에서 자세히 설명
문서 추가
문서 추가는 PUT 메서드로 수행된다.id 값은 지정하지 않을경우 UUID 를 통해 무작위로 생성된다.
1 | PUT /movie/_doc/1 |
타 서비스의 DB 와 동기화 해야할 때 지정하지 않은 ID 가 오류를 야기할 수 있음으로
데이터 삽입시 id 를 지정하는 것을 권장한다.
op_type 파라미터를 통해 데이터가 존재하면 수정하고 없을경우 에러를 반환하도록 설정 가능하다.
생성하길 원한다면 op_type 에 create 를 설정
수정하길 원한다면 op_type 에 index 를 설정
아래의 경우 이미 문서에 version 값이 존재한다고 error 를 반환하였다.
1 | PUT movie_dynamic/_doc/1?op_type=create |
version 값은 1 부터 시작하여 수정될때 마다 1씩 증가한다.
timeout 파라미터를 통해 문서 색인 타임아웃 설정이 가능하다.default=1m 인데 이를 timeout 파라미터를 통해 조절할 수 있다.
1 | PUT movie_dynamic/_doc/1?timeout=5m |
문서 수정
추가와 수정은 모두 PUT 메서드를 사용한다.
수정할 때에도 추가할 때 썼던 url 을 그대로 사용해서 수정 할 수 있다.
또한 _source 필드가 활성화 돼있어야 한다.
1 | PUT movie_dynamic/_doc/1 |
만약 수정되기만을 바란다면 위에서 알아보았던
op_type=index적용
Elastic Search 에서 수정은 재색인(reindex) 과정까지 발생하기 때문에 생성과정과 비용이 비슷하다.
_update uri 를 사용하면 특정 필드만 수정할 수 있다.
아래와 같이 문서를 먼저 생성하고
1 | PUT movie_dynamic/_doc/1 |
_update url 을 사용해서특정 필드만 수정시킨다.
1 | POST movie_dynamic/_doc/1/_update |
다시 조회하면 아래와 같이 counter 필드가 1 증가되어있다.
1 | GET movie_dynamic/_doc/1 |
문서 삭제
문서 삭제는 DELETE 메서드와 id 를 url 에 설정한다.
1 | DELETE /movie/_doc/1 |
_delete_by_query uri 를 사용하면 query 를 사용해 삭제할 목록을 한번에 지정 가능하다.
query 에 대해서는 아래 검색쿼리 항목에서 자세히 설명
1 | POST movie_dynamic/_delete_by_query |
각 문서를 실시간으로 삭제하는 것이 아니라 인덱스의 스냅숏을 불러와 해당 버전의 문서들을 기반으로 삭제를 수행한다.
만일 대량의 수정 작업이 수행 중일 때 삭제를 수행하면 두 작업의 버전이 충돌하게 되고 version_conflicts 항목을 통해 삭제에 실패한 문서의 건수를 출력한다.
기타 API
_bulk
한 번의 API 호출로 다수의 문서를 색인하거나 삭제할 수 있다.
속도에서 차이가 많기에 대량 색인이 필요한 경우에는 _ bulk 를 사용하는 것이 좋다.
하지만 여러 건의 데이터가 한 번에 처리되기 때문에 도중에 실패가 발생하 더라도 이미 갱신되거나 수정된 결과는 롤백되지 않는다는 점이다. 그러므로 항상 처리 결과를 확인해야 한다.
1 | POST _bulk |
_reindex
인덱스에서 다른 인덱스로 문서를 복사할 때 주로 사용한다.
1 | POST /_reindex |
1 | POST /_reindex |
Multi index
여러개의 index 를 한번에 검색할 수 있다.
아래처럼 컴마를 사용해 Multi index 를 지정하거나
1 | POST movie_search,movie_auto/_search |
아래와 같이 와일드카드 문자를 기반으로 Multi index 를 지정할 수 있다.
1 | POST /log-2019-*/_search |