ELASTIC SEARCH
엘라스틱 서치의 자료구조
index
type
- document
엘라스틱 서치 VS 관계형DB
Elastic Search | Relational DB |
---|---|
Index | DataBase |
Type | Table |
Document | Row |
Field | Column |
Mapping | Schema |
Elastic Search | Relational DB |
---|---|
GET | Select |
POST | Insert |
DELETE | Delete |
PUT | Update |
엘라스틱서치는 Rest-API를 쓴다는 것을 짐작할 수 있다.
curl -XGET localhost:9200/classes/class/1
xxxxxxxxxx
select * FROM class where id=1
xxxxxxxxxx
curl -XPOST localhost:9200/classes/class/1 -d '{xxx}'
xxxxxxxxxx
Insert into class values {xxx}
xxxxxxxxxx
curl -XPUT localhost:9200/classes/class/1 -d '{XXX}
xxxxxxxxxx
Update class set xxx where id = 1
xxxxxxxxxx
curl -XDELETE localhost:9200/classes/class/1
xxxxxxxxxx
Delete FROM class where id = 1
결과를 보다 깔끔하게 확인하는 방법
?pretty
xxxxxxxxxx
curl -XGET http://localhost:9200/classes
xxxxxxxxxx
{"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index","resource.type":"index_or_alias","resource.id":"classes","index_uuid":"_na_","index":"classes"}],"type":"index_not_found_exception","reason":"no such index","resource.type":"index_or_alias","resource.id":"classes","index_uuid":"_na_","index":"classes"},"status":404}
xxxxxxxxxx
curl -XGET http://localhost:9200/classes?pretty
xxxxxxxxxx
{
"error" : {
"root_cause" : [
{
"type" : "index_not_found_exception",
"reason" : "no such index",
"resource.type" : "index_or_alias",
"resource.id" : "classes",
"index_uuid" : "na",
"index" : "classes"
}
],
"type" : "index_not_found_exception",
"reason" : "no such index",
"resource.type" : "index_or_alias",
"resource.id" : "classes",
"index_uuid" : "na",
"index" : "classes"
},
"status" : 404
INDEX 만들기
x
curl -XPUT localhost:9200/classes
xxxxxxxxxx
{"acknowledged":true,"shards_acknowledged":true,"index":"classes"}
INDEX 확인하기
xxxxxxxxxx
curl -XGET localhost:9200/classes?pretty
xxxxxxxxxx
결과
{
"classes" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"creation_date" : "1535458058372",
"number_of_shards" : "5",
"number_of_replicas" : "1",
"uuid" : "GIFo0IhWSc6TSqD5CHZa7A",
"version" : {
"created" : "6040099"
},
"provided_name" : "classes"
}
}
}
}
provided_name
에 classes로 되어있는 것을 알 수 있다.
이제 생성하였던 classes
인덱스를 삭제해보자
xxxxxxxxxx
curl -XDELETE localhost:9200/classes
xxxxxxxxxx
{"acknowledged":true}
인덱스가 삭제되었는지 확인하기
xxxxxxxxxx
curl -XGET localhost:9200/classes
xxxxxxxxxx
결과
{
"error" : {
"root_cause" : [
{
"type" : "index_not_found_exception",
"reason" : "no such index",
"resource.type" : "index_or_alias",
"resource.id" : "classes",
"index_uuid" : "_na_",
"index" : "classes"
}
],
"type" : "index_not_found_exception",
"reason" : "no such index",
"resource.type" : "index_or_alias",
"resource.id" : "classes",
"index_uuid" : "_na_",
"index" : "classes"
},
"status" : 404
}
인덱스에 값을 넣으려 한다
xxxxxxxxxx
curl -XPOST localhost:9200/classes/class/1?pretty -H "Content-Type:application/json" -d "{\"title\": \"Data_Structure\", \"professor\": \"Kim\"}"
이 부분에서 많이 헤맸다.
비주얼스튜디오의 터미널에서 @가 작동하지 않아 애먹었다.
데이터 업데이트 방법
xxxxxxxxxx
curl -XPOST localhost:9200/classes/class/1/_update -d ~~~~~~~~~~~
_update를 하지않으면 override 되어버린다.
PUT은 Index를 만드는 명령어고
POST는 document를 추가하는 명령어
PUT을 통해 새로 document를 쓰던지 POST로 _update를 사용하던지
UPDATE를 하는 다른 방법 (숫자, 스크립트 이용)
curl -XPOST localhost:9200/classes/class/1/_update?pretty -d "{"script": "ctx.source.aa += 5" }" -H "Content-Type:application/json"
aa 필드값이 이전에 POST되었어야만 사용가능
Field 구조 : 키와 값으로 구성. 키에는 이름, 값에는 데이터 타입이 정의(Mapping)
참고 욱's 노트'
'Back-end' 카테고리의 다른 글
ElasticSearch Mapping (0) | 2018.08.30 |
---|---|
Elastic Search 벌크 (0) | 2018.08.29 |
데이터베이스 JOIN 역할 (0) | 2018.07.19 |
Flask 익히기 (0) | 2018.07.07 |
Django Apache2 연동 (0) | 2018.04.25 |
댓글