ElasticSearch 핵심 개념 및 문서의 CRUD
본고의 모든 명령은 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.