기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자습서: Amazon OpenSearch Service에서 문서 생성 및 검색
이 자습서에서는 Amazon OpenSearch Service에서 문서를 생성하고 검색하는 방법을 알아봅니다. JSON 문서 형식으로 인덱스에 데이터를 추가합니다. OpenSearch Service는 사용자가 추가하는 첫 번째 문서 주위에 인덱스를 생성합니다.
이 자습서에서는 문서 생성을 위한 HTTP 요청, 문서 ID 자동 생성, 문서에 대한 기본 및 고급 검색 수행 방법을 설명합니다.
참고
이 자습서에서는 개방 액세스가 가능한 도메인을 사용합니다. 최고 수준의 보안을 위해 도메인을 Virtual Private Cloud(VPC) 내부에 두는 것이 좋습니다.
사전 조건
이 자습서의 사전 요구 사항은 다음과 같습니다.
-
AWS 계정이 있어야 합니다.
-
활성 OpenSearch Service 도메인이 있어야 합니다.
인덱스에 문서 추가
인덱스에 문서를 추가하려면 Postman
인덱스에 문서 추가
-
도메인에 대한 OpenSearch Dashboards URL으로 이동합니다. OpenSearch Service 콘솔의 도메인 대시보드에서 URL을 찾을 수 있습니다. URL은 다음 형식을 따릅니다.
domain-endpoint
/_dashboards/ -
기본 사용자 이름과 암호를 사용하여 로그인합니다.
-
왼쪽 탐색 패널을 열고 Dev Tools(개발 도구)를 선택합니다.
-
새 리소스를 생성하기 위한 HTTP 동사는 새 문서와 인덱스를 생성하는 데 사용하는 PUT입니다. 콘솔에서 다음 명령을 입력합니다.
PUT fruit/_doc/1 { "name":"strawberry", "color":"red" }
PUT
요청은 이름이 fruit인 인덱스를 생성하고 ID가 1인 단일 문서를 인덱스에 추가합니다. 다음과 같은 응답이 생성됩니다.{ "_index" : "fruit", "_type" : "_doc", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }
자동으로 생성되는 ID 만들기
OpenSearch Service는 문서에 대한 ID를 자동으로 생성할 수 있습니다. ID를 생성하는 명령은 PUT 요청 대신 POST 요청을 사용하며 문서 ID가 필요하지 않습니다(이전 요청과 비교).
개발자 콘솔에서 다음 요청을 입력합니다.
POST veggies/_doc { "name":"beet", "color":"red", "classification":"root" }
이 요청은 veggies라는 인덱스를 생성하고 인덱스에 문서를 추가합니다. 다음과 같은 응답이 생성됩니다.
{ "_index" : "veggies", "_type" : "_doc", "_id" : "3WgyS4IB5DLqbRIvLxtF", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }
응답에서 ID가 자동으로 생성되었음을 나타내는 추가 _id
필드에 유의합니다.
참고
URL에서 _doc
다음에 아무 것도 제공하지 않습니다. 대개 이 자리에 ID가 들어갑니다. 생성된 ID로 문서를 만들고 있기 때문에 아직 ID를 제공하지 않습니다. 업데이트용으로 예약되어 있습니다.
POST 명령으로 문서 업데이트
문서를 업데이트하려면 ID 번호와 함께 HTTP POST
명령을 사용합니다.
먼저 ID가 42
인 문서를 생성합니다.
POST fruits/_doc/42 { "name":"banana", "color":"yellow" }
그런 다음 해당 ID를 사용하여 문서를 업데이트합니다.
POST fruits/_doc/42 { "name":"banana", "color":"yellow", "classification":"berries" }
이 명령은 새 필드 classification
으로 문서를 업데이트합니다. 다음과 같은 응답이 생성됩니다.
{ "_index" : "fruits", "_type" : "_doc", "_id" : "42", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }
참고
존재하지 않는 문서를 업데이트하려고 하면 OpenSearch Service에서 문서를 생성합니다.
대량 작업 수행
POST _bulk
API 작업을 사용하여 하나의 요청에서 하나 이상의 인덱스에 대해 여러 작업을 수행할 수 있습니다. 대량 작업 명령의 형식은 다음과 같습니다.
POST /_bulk <action_meta>\n <action_data>\n <action_meta>\n <action_data>\n
각 작업에는 두 줄의 JSON이 필요합니다. 먼저 작업 설명 또는 메타데이터를 제공합니다. 다음 줄에서 데이터를 제공합니다. 각 부분은 줄 바꿈(\n)으로 구분됩니다. 삽입에 대한 작업 설명은 다음과 같습니다.
{ "create" : { "_index" : "veggies", "_type" : "_doc", "_id" : "7" } }
데이터가 포함된 다음 줄은 다음과 같습니다.
{ "name":"kale", "color":"green", "classification":"leafy-green" }
종합하면 메타데이터와 데이터는 대량 작업의 단일 작업을 나타냅니다. 다음과 같이 하나의 요청으로 많은 작업을 수행할 수 있습니다.
POST /_bulk { "create" : { "_index" : "veggies", "_id" : "35" } } { "name":"kale", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "36" } } { "name":"spinach", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "37" } } { "name":"arugula", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "38" } } { "name":"endive", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "39" } } { "name":"lettuce", "color":"green", "classification":"leafy-green" } { "delete" : { "_index" : "vegetables", "_id" : "1" } }
마지막 작업은 delete
입니다. delete
작업 이후의 데이터가 없습니다.
문서 검색
이제 데이터가 클러스터에 있으므로 데이터를 검색할 수 있습니다. 예를 들어, 모든 뿌리 채소를 검색하거나, 잎이 많은 채소 수를 모두 구하거나, 시간당 기록된 오류 수를 찾을 수 있습니다.
기본 검색
기본 검색은 다음과 같습니다.
GET veggies/_search?q=name:l*
요청은 lettuce 문서를 포함하는 JSON 응답을 생성합니다.
고급 검색
요청 본문에 쿼리 옵션을 JSON으로 제공하여 고급 검색을 수행할 수 있습니다.
GET veggies/_search { "query": { "term": { "name": "lettuce" } } }
이 예제에서는 lettuce 문서가 포함된 JSON 응답도 생성합니다.
정렬
정렬을 사용하여 이러한 유형의 쿼리를 더 많이 수행할 수 있습니다. 먼저 자동 필드 매핑에서 기본적으로 정렬할 수 없는 유형을 선택했기 때문에인덱스를 다시 생성해야 합니다. 다음 요청을 전송하여 인덱스를 삭제했다가 다시 생성합니다.
DELETE /veggies PUT /veggies { "mappings":{ "properties":{ "name":{ "type":"keyword" }, "color":{ "type":"keyword" }, "classification":{ "type":"keyword" } } } }
그런 다음 인덱스를 데이터로 다시 채웁니다.
POST /_bulk { "create" : { "_index" : "veggies", "_id" : "7" } } { "name":"kale", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "8" } } { "name":"spinach", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "9" } } { "name":"arugula", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "10" } } { "name":"endive", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "11" } } { "name":"lettuce", "color":"green", "classification":"leafy-green" }
이제 정렬과 함께 검색할 수 있습니다. 다음 요청은 분류별 오름차순 정렬을 추가합니다.
GET veggies/_search { "query" : { "term": { "color": "green" } }, "sort" : [ "classification" ] }
관련 리소스
자세한 정보는 다음 자료를 참조하십시오.