본문 바로가기

백엔드

Elastic Search#3

반응형

1. Index, Type, Document

Cluster는 node들의 집합이고 노드는 shard로 구성되며 데이터는 shard로 분산되어 저장.

 

Index(DB)는 1개 이상의 primary shard에 매핑되고 0개 이상의 replica shard를 가질 수 있는 논리적 이름 공간을 말하며, RDBMS의 DB와 같은 개념

Type(Table)

Document(row): 실제로 검색할 데이터

 

Restful API를 통해 index에 document를 추가 = '문서를 색인화한다'

이를 위해서는 index가 어떤 type인지, _id를 지정해주어야 함.

_id = pk

 

PUT /index/type/_id

PUT /customer/external/1?pretty
{
 "name": "John Doe"
}
# {} = document

 

1) 클러스터에 존재하는 모든 index 조회

 

[GET]
# http://localhost:9200/_cat/indices?v

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

 

아무런 데이터가 없음을 알 수 있음.

 

2) index 추가

 

 

 

[PUT]
http://localhost:9200/customer //customer이라는 인덱스 추가

//결과
{
    "acknowledged": true, //작업 성공
    "shards_acknowledged": true,
    "index": "customer"
}

 

 

'http://localhost:9200/_cat/indices?v'의 경우, customer index가 잘 생성되었음을 알 수 있다.

 

3. document 추가

 

 

{
    "_index": "customer2",
    "_type": "info",
    "_id": "1",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 1
}

 

앞에까지 customer2 index, info type는 생성하지 않았다.

index와 type을 자동으로 생성하면서 색인화가 되었다는 걸 알아야 한다.

 

+ 아까 /1로 _id값을 명시해주었는데,

명시하지 않으면 이상한 값이 나온다.

 

.json을 반복적으로 하고 싶으면

data.json에 원하는 내용을 넣고,
# curl -XPOST 'localhost:9200/customer2/info/2?pretty' -H 'Content-Type: application/json' -d @data.json

-> @경로를 넣으면 된다.

 

4. document 조회

 

1) customer2 index의 모든 document 조회

 

[GET]
http://localhost:9200/customer2/_search

-> 모든 row 즉 document가 나온다.

 

2) 모든 index에서 모든 document 조회

 

[GET]
http://localhost:9200/_all/_search

 

3) id 이용해서 document 검색

 

[GET]
http://localhost:9200/customer2/info/1

 

4) 실제 데이터인 _source만 보고 싶을 때

 

[GET]
# http://localhost:9200/customer2/info/2?filter_path=_source.name

 

5. Document 수정

 

# curl -XPUT 'localhost:9200/customer2/info/1?pretty' -H 'Content-Type: application/json' -d '{
"name": "victolee_update"
}'

 

6. index, document 삭제

 

- 특정 id의 document 삭제

[DELETE]
# http://localhost:9200/customer2/info/1

 

- index 삭제

[DELETE]
# http://localhost:9200/customer2

 

 

반응형