English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Elasticsearch 문서 API

Elasticsearch는 단일 문서 API와 다중 문서 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 생성

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를 가져오기

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 작업을 수행할 수 있습니다.

삭제 API

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와 같이 리프레시 및 타임아웃 옵션을 지정할 수 있습니다.

업데이트 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
}

업데이트된 문서에 대한 요청을 보내면 업데이트를 확인할 수 있습니다.