English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Elasticsearch는 단일 문서 API와 다중 문서 API를 제공하며, 각 API 호출은 단일 문서와 다중 문서에 대응합니다.
특정 매핑을 가진 상응 인덱스에 요청을 보내면, JSON 문서를 인덱스에 추가하거나 업데이트하는 데 도움이 됩니다. 예를 들어, 다음 요청은 JSON 객체를 "학교" 인덱스와 "학교 매핑" 아래에 추가합니다.-
PUT schools/_doc/5 { name":"City School", "description":"ICSE", "street":"West End", "city":"Meerut", "state":"UP", "zip":"250002, "location":[28.9926174, 77.692485], "fees":3500, "tags":["fully computerized"], "rating":"4.5" }
위의 코드를 실행할 때, 다음과 같은 결과를 얻습니다.-
{ "_index": "schools", "_type": "_doc", "_id": ""5, "_version": 1, "result" : "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 2, "_primary_term": 1 }
JSON 객체를 특정 인덱스에 추가하는 요청이 오면, 그 인덱스가 존재하지 않으면 이 API가 인덱스와 해당 JSON 객체의 기본 매핑을 자동으로 생성합니다. 이 기능을 비활성화하려면 elasticsearch.yml 파일에 있는 다음 파라미터 값을 false로 변경할 수 있습니다.
action.auto_create_index:false index.mapper.dynamic:false
또한, 다음 파라미터 값을 변경하여 인덱스의 자동 생성을 제한할 수 있습니다. 특정 패턴을 가진 인덱스 이름만 사용할 수 있습니다.-
action.auto_create_index:+acc*,-bank*
주의하세요:이곳에서 + 표시는 허용을, -는 불허를 의미합니다.
Elasticsearch는 버전 관리 도구도 제공합니다. 특정 문서의 버전을 지정하기 위해 버전 쿼리 파라미터를 사용할 수 있습니다.
PUT schools/_doc/5?version=7&version_type=external { "name":"Central School", "description":"CBSE Affiliation", "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115, "location":[31.8955385, 76.8380405], "fees":2200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3" }
위의 코드를 실행할 때, 다음과 같은 결과를 얻습니다.-
{ "_index": "schools", "_type": "_doc", "_id": ""5, "_version": 7, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 3, "_primary_term": 1 }
버전 관리는 실시간 과정으로, 실시간 검색 작업에 영향을 받지 않습니다.
가장 중요한 버전 관리 유형이 두 가지 있습니다.-
내부 버전 관리는 기본 버전으로, 부터1시작하여 각 번개(삭제 포함)마다 증가합니다.
문서의 버전 관리가 외부 시스템(예: 제3자 버전 관리 시스템)에 저장되었을 때 이 기능을 사용합니다. 이 기능을 활성화하려면 version_type을 external로 설정해야 합니다. 이 경우 Elasticsearch는 외부 시스템이 지정한 버전 번호를 저장하고 자동으로 증가하지 않습니다.
작업 유형은 생성 작업을 강제로 실행하는 데 사용됩니다. 이는 기존 문서를 덮어쓰지 않도록 도와줍니다.
PUT chapter/_doc/1?op_type=create { "Text":"this is chapter one" }
위의 코드를 실행할 때, 다음과 같은 결과를 얻습니다.-
{ "_index" : "chapter", "_type": "_doc", "_id": ""1, "_version": 1, "result" : "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no" : 0, "_primary_term": 1 }
ID를 지정하지 않았을 경우 Elasticsearch는 문서에 자동으로 ID를 생성합니다.
POST chapter/_doc/ { "user" : "tpoint", "post_date" : ""2018-12-25T14:12:12, "message" : "Elasticsearch Tutorial" }
위의 코드를 실행할 때, 다음과 같은 결과를 얻습니다.-
{ "_index" : "chapter", "_type": "_doc", "_id" : "PVghWGoB",7LiDTeV6LSGu", "_version": 1, "result" : "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 1, "_primary_term": 1 }
API는 특정 문서에 대한 get 요청을 통해 JSON 객체를 추출하는 데 도움을 줍니다.
pre class="prettyprint notranslate" > GET schools/_doc/5
위의 코드를 실행할 때, 다음과 같은 결과를 얻습니다.-
{ "_index": "schools", "_type": "_doc", "_id": ""5, "_version": 7, "_seq_no": 3, "_primary_term": 1, "found" : true, "_source" : { "name" : "Central School", "description" : "CBSE Affiliation", "street" : "Nagan", "city" : "paprola", "state" : "HP", "zip" : "176115, "location" : [ 31.8955385, 76.8380405 ], "fees" : " 2200, "tags" : [ "고등학교" "beautiful campus" ], "rating" : "3.3" } }
이 작업은 실시간으로 진행되며 인덱스 새로운 속도에 영향을 받지 않습니다.
버전을 지정하면 Elasticsearch가 해당 문서의 버전만 가져옵니다.
요청에서 _all을 지정하면 Elasticsearch가 각 유형별로 문서 ID를 검색하여 첫 번째 일치하는 문서를 반환합니다.
특정 문서의 결과에서 필요한 필드를 지정할 수 있습니다.
GET schools/_doc/5?_source_includes=name,fees
위의 코드를 실행할 때, 다음과 같은 결과를 얻습니다.-
{ "_index": "schools", "_type": "_doc", "_id": ""5, "_version": 7, "_seq_no": 3, "_primary_term": 1, "found" : true, "_source" : { "fees" : " 2200, "name" : "Central School" } }
GET 요청에 _source 부분을 추가하여 결과의 원본 부분을 가져올 수 있습니다.
GET schools/_doc/5?_source
위의 코드를 실행할 때, 다음과 같은 결과를 얻습니다.-
{ "_index": "schools", "_type": "_doc", "_id": ""5, "_version": 7, "_seq_no": 3, "_primary_term": 1, "found" : true, "_source" : { "name" : "Central School", "description" : "CBSE Affiliation", "street" : "Nagan", "city" : "paprola", "state" : "HP", "zip" : "176115, "location" : [ 31.8955385, 76.8380405 ], "fees" : " 2200, "tags" : [ "고등학교" "beautiful campus" ], "rating" : "3.3" } }
refresh 파라미터를 true로 설정하여 스파크를 새로 고칠 수 있으며, 그 후 get 작업을 수행할 수 있습니다.
Elasticsearch에 HTTP DELETE 요청을 보내어 특정 인덱스, 매핑 또는 문서를 삭제할 수 있습니다.
DELETE schools/_doc/4
위의 코드를 실행할 때, 다음과 같은 결과를 얻습니다.-
{ "found":true, "_index":"schools", "_type":"school", "_id":"4, "_version":2, "_shards":{"total":2, "successful":1, "failed":0} }
문서의 버전을 지정하여 특정 버전을 삭제할 수 있습니다. 특정 사용자에서 문서를 삭제하려면 라우팅 파라미터를 지정할 수 있으며, 문서가 해당 사용자에 속하지 않으면 작업이 실패합니다. 이 작업에서는 GET API와 같이 리프레시 및 타임아웃 옵션을 지정할 수 있습니다.
스크립트는 이 작업을 수행하며, 버전 관리는 인덱스를 가져오고 재구성하는 동안 어떤 업데이트도 발생하지 않았는지 보장합니다. 예를 들어, 수업료를 업데이트할 수 있습니다.-
POST schools/_update/4 { "script" : { "source": "ctx._source.name = params.sname", "lang": "painless", "params" : { "sname" : "도시별 학교" } } }
위의 코드를 실행할 때, 다음과 같은 결과를 얻습니다.-
{ "_index": "schools", "_type": "_doc", "_id": ""4, "_version": 3, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 4, "_primary_term": 2 }
업데이트된 문서에 대한 요청을 보내면 업데이트를 확인할 수 있습니다.