ElasticSearch 핵심 개념 및 문서의 CRUD

7979 단어
카탈로그
  • 1. 기본 개념
  • 1.1 Node 및 Cluster
  • 1.2 Index
  • 1.3 Document
  • 1.4 Type(ES6.0에서 제거됨)
  • 2. 데이터의 삭제와 수정
  • 2.1 데이터 추가
  • 2.2 조회 데이터
  • 2.3 데이터 업데이트
  • 2.4 데이터 삭제

  • 본고의 모든 명령은 Kibana의 dev tools에서 진행됩니다.

    1. 기본 개념


    1.1 Node 및 Cluster


    Elastic는 본질적으로 분포식 데이터베이스로 여러 대의 서버가 협동하여 작업할 수 있고 각 서버는 여러 개의 Elastic 실례를 실행할 수 있다.하나의 Elastic 인스턴스를 하나의 노드(node)라고 합니다.하나의 노드가 하나의 집단 (cluster) 을 구성한다.

    1.2 Index


    Elastic은 모든 필드를 인덱스하고 처리된 후 인버터 색인(Inverted Index)을 기록합니다.데이터를 찾을 때 이 인덱스를 직접 찾습니다.따라서 Elastic 데이터 관리의 최상위 단위를 Index(인덱스)라고 합니다.그것은 단일 데이터베이스의 동의어이다.각 Index(데이터베이스)의 이름은 소문자여야 합니다.
    사실상, 우리의 데이터는 슬라이드 (shards) 에 저장되고, 인덱스는 단지 한 개 또는 여러 개의 슬라이드를 한데 묶는 논리적 공간일 뿐이다.그러나 이것은 단지 내부 세부 사항일 뿐이다. 우리의 프로그램은 영화 나누기에 전혀 관심을 갖지 않는다.우리 프로그램의 경우, 문서는 인덱스 (index) 에 저장됩니다.나머지 세부 사항은 Elasticsearch가 관심을 가지면 됩니다.
    다음 명령을 사용하여 이 노드 아래의 모든 인덱스를 조회할 수 있습니다
    # 
    GET _cat/indices?v

    다음과 같은 결과를 얻을 수 있다
    health status index     uuid                   pri rep docs.count docs.deleted store.size pri.store.size
    green  open   idx5      Tzjr1CmGRlCOjZUyQ0QUhA   3   0          2            0      8.5kb          8.5kb
    yellow open   idx4      z7zw83L9Tjyc1Fx7jb6l0A   1   1          3            1     11.8kb         11.8kb
    green  open   idx2      7SSk77DkTN-VpUuXehgaDQ   3   0          7            2     27.2kb         27.2kb
    yellow open   idx1      1bqxLckjSk-BZtERVNhPZQ   1   1          0            0       283b           283b
    green  open   idx3      qc32ybYBT869QIPaYmcWGQ   3   0          0            0       849b           849b

    고객 인덱스가 노란색 운행 상황을 표시한 것도 알아차렸을 것이다.노란색은 일부 복사본이 할당되지 않았음을 나타냅니다.이 인덱스가 발생하는 이유는 기본적으로 Elasticsearch가 이 인덱스에 복사본을 만들었기 때문입니다.우리는 현재 하나의 노드만 실행하고 있기 때문에, 다른 노드가 집단에 가입한 잠시 후 시간까지 복사본을 분배할 수 없습니다. (고가용성에 사용됩니다.)이 복사본을 두 번째 노드에 분배하면 이 인덱스의 운행 상황은 녹색으로 변합니다.
    색인 만들기 (기본 설정 사용)
    PUT idx1/

    색인을 만들고 노드의 복사와 분할 수량을 동시에 지정합니다
    PUT idx2/
    {
      "settings": {
        "index": {
            "number_of_shards" : "3",
            "number_of_replicas" : "0"
        }
      }
    }

    색인 검색 기본 정보
    GET idx2/

    모든 색인 설정 가져오기
    GET _all/_settings

    색인 삭제
    DELETE idx3/

    1.3 Document


    Index의 단일 레코드를 Document(문서)라고 합니다.여러 개의 Document가 Index를 구성합니다.
    Document는 JSON 형식으로 다음 예제를 나타냅니다.
    {
      "_index" : "idx2",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 5,
      "_seq_no" : 5,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "name" : "BiologyBook2.0",
        "price" : 100.0
      }
    }

    같은 Index에 있는 Document는 같은 구조(scheme)를 요구하지 않지만 같은 구조를 유지하는 것이 검색 효율을 높이는 데 도움이 됩니다.그러나 es6.0 후속 버전에서는 type이 폐지되었습니다. 모든 Document에서 기본적으로 _doc 유형.

    1.4 Type(ES6.0에서 제거됨)


    Document는 그룹을 나눌 수 있습니다. 예를 들어 weather 이 인덱스에서는 도시(베이징과 상하이)에 따라 그룹을 나눌 수도 있고 기후에 따라 그룹을 나눌 수도 있습니다(맑은 날과 비 오는 날).이 그룹을 Type이라고 합니다. 이 그룹은 가상 논리 그룹으로 Document를 필터링하는 데 사용됩니다.

    2. 데이터의 삭제와 수정


    2.1 데이터 추가


    에스7.x 이후 취소type, 모두 사용_doc과 같은 문서 유형, 반드시 이후 버전 연결_doc도 취소될 것입니다.
    지정된 /Index/Type 에 PUT 요청을 보내면 Index에 레코드를 추가할 수 있습니다.예를 들어 /idx1/_doc에 요청을 보내면 인원 기록을 추가할 수 있다.
    POST /idx4/_doc/
    {
      "name" : "anqi1.0",
      "age" : 20
    }

    우리는 다음과 같은 json 결과를 얻을 수 있습니다. 그 중에서 _id 은 이 기록 id입니다. 만약 지정하지 않으면es는 저에게 이런 무작위 id를 생성하고 result 우리를 위해 실행하는 조작을 도와줍니다. _index 은 소속 인덱스입니다.
    {
      "_index" : "idx4",
      "_type" : "_doc",
      "_id" : "0u8pvGsB-aEEelT0MVgW",
      "_version" : 1,
      "result" : "created",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 1,
      "_primary_term" : 1
    }

    우리도 생성된 id를 지정할 수 있다. 그러면 얻은 _id는 우리가 지정한 숫자 1이다.
    POST /idx4/_doc/1
    {
      "name" : "anqi1.0",
      "age" : 20
    }

    존재하지 않는 문서에 대한 업데이트 작업을 수행하면 데이터가 추가됩니다.
    PUT /idx4/_doc/2
    {
      "age" : 33
    }

    다음과 같은 결과를 얻었다. 물론 우리는 통일된 색인 아래 구조가 다른 데이터를 저장하는 것을 제창하지 않는다.(age 속성이 하나밖에 없기 때문에)
    {
      "_index" : "idx4",
      "_type" : "_doc",
      "_id" : "2",
      "_version" : 1,
      "result" : "created",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 3,
      "_primary_term" : 1
    }

    2.2 조회 데이터


    id에 따라 문서 가져오기
    GET /idx5/_doc/1

    다음 명령을 사용하여 idx5 인덱스의 모든 데이터를 조회합니다
    GET /idx5/_search

    다음과 같은 결과를 얻었습니다_source. 즉, 삽입된 데이터입니다.
    {
      "took" : 353,
      "timed_out" : false,
      "_shards" : {
        "total" : 3,
        "successful" : 3,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {"value" : 2,"relation" : "eq"},
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "idx5",
            "_type" : "_doc",
            "_id" : "2",
            "_score" : 1.0,
            "_source" : {
              "city" : "Yuanping",
              "email" : "[email protected]"
            }
          },
          {
            "_index" : "idx5",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : 1.0,
            "_source" : {
              "city" : "Xinzhou",
              "email" : "[email protected]"
            }
          }
        ]
      }
    }
    

    위 코드에서 결과를 되돌려주는 took 필드는 이 작업의 소모 시간(밀리초), timed_out 필드는 시간 초과 여부를 표시하고, hits 필드는 명중한 기록을 표시하며, 하위 필드의 의미는 다음과 같다.
  • total: 기록수를 되돌려줍니다. 이 예는 2개입니다.
  • max_score: 가장 높은 일치 정도, 본 예는 1.0.
  • hits: 되돌아오는 기록으로 구성된 수조.

  • 되돌아오는 기록에는 모든 기록에 일치하는 프로그램을 표시하는 _score 필드가 있습니다. 기본값은 이 필드의 내림차순으로 배열됩니다.

    2.3 데이터 업데이트


    업데이트 데이터는 발송PUT 요청입니다. 여기에서 id 1의 데이터 중 age 속성을 22로 업데이트합니다
    PUT /idx4/_doc/1
    {
      "age" : 22
    }

    업데이트 후 저희는 다음과 같은 결과를 얻었습니다.
    {
      "_index" : "idx4",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 2,
      "result" : "updated",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "_seq_no" : 2,
      "_primary_term" : 1
    }

    보시다시피 기록된 Id는 변하지 않았지만 버전(version)은 1, 조작 유형(result)은 2에서 created로 바뀌었습니다. 이번에는 새 기록이 아니기 때문입니다.
    Elasticsearch는 분산 시스템입니다.문서가 생성되고, 업데이트되고, 삭제되면, 새 버전은 그룹의 다른 노드로 복사됩니다.Elasticsearch는 비동기적(asynchronous)이자 동기적(concurrent)이며 복제 요청은 병행적으로 발송되지만 목적지에 도착하는 순서는 무질서하다는 뜻이다.Elasticsearch 시스템은 오래된 문서가 영원히 새로운 버전을 덮어쓸 수 없도록 하는 방법을 필요로 한다.
    문서가 변경될 때마다 문서의 updated 이 증가합니다(+1).Elasticsearch 사용_version은 모든 수정이 정확한 순서에 따라 실행될 수 있도록 합니다.문서의 이전 버전이 새 버전 이후에 도착하면 간단하게 무시됩니다.

    2.4 데이터 삭제


    데이터 삭제는 전송_version 요청입니다.
    DELETE /idx4/_doc/1

    좋은 웹페이지 즐겨찾기