2019. 5. 22. 12:14ㆍELK stack
앞서 말했듯이 ES는 REST 통신을 지원한다.
따라서 curl 커맨드 기능을 통해 기본적인 명령어를 수행하고 결과를 확인할 수 있다.
우선 REST API의 명령어는 다음과 같다.
GET : 조회 POST : 저장 PUT : 수정 DELETE: 삭제
ES의 REST API URL 포맷은 다음과 같다.
http://{Node:PortNumber}/{Index}/{Type}
Index는 소문자여야 한다. Type은 Index와 마찬가지로 소문자를 권장한다.
이러한 문법 뒤에 JSON이나 명령어를 통해 인덱스를 생성, 매핑하거나 검색을 할 수 있다.
Curl –XPUT http://localhost:9200/myindex -d ‘{
“settings”: {
“index”:{
“number_of_shards”: 2,
“number_of_replicas”:1
}
}
}’
이런식으로 index의 생성이 가능하며, {“acknowledged”:true} 와 비슷한 결과가 반환되면 성공이다.
이미 index가 있을 때에는 400 에러가 반환된다.
이렇게 색인을 만들면 색인에 문서를 생성할 수 있다.
Curl –XPUT http://localhost:9200/myindex/mytype/1 -d ‘{“name”:”Paul”, “age”:35}’
이렇게 하면 name 필드와 age 필드가 생성되며 문서가 만들어진다.
다음으로 위의 문서를 조회하는 명령어를 알아보자
Curl –XGET http://localhost:9200/myindex/mytype/_mapping?pretty =true
여기서 _mapping은 매핑된 데이터를 확인하겠다는 것이고, pretty=true는 데이터를 JSON 형태에 맞게 행이 잘 나뉘어진 모양으로 데이터를 보여주는 것을 뜻한다.
만일 위의 명령어 과정에서 406오류가 나는 경우, Header 데이터를 선언해 주지 않아서 일어난 경우가 많다. Curl 뒤에 –H ‘Content-Type: application/json’을 추가하면 대체로 해결된다.
만일 위의 색인을 지우고 싶다면,
Curl –XDELETE http://localhost:9200/myindex 를 치면 색인과 함께 데이터가 삭제된다.
검색의 경우 curl –XGET ‘http://localhost:9200/myindex/mytype/_search?를 통해 명령이 가능하다.
_search 가 명령어이며, ? 뒤에 명령 파라메터를 정의해주면 된다. 기본적으로 _search?q= 가 단순 문자열 쿼리이며, q=name:Paul 과 같은 형태로 필드명과 필드 내용이 매칭되는 것을 고를 수 있다. 여러 필드를 고르고 싶을 때에는 중간에 &로 이어주면 된다.
만약 모든 데이터를 알고 싶을 때에는
curl –XGET ‘http://localhost:9200/myindex/mytype/_search’ –d ‘{“query”:{“match_all:{}}}’
과 같은 식으로 실행할 수 있다.
검색 결과는
{
"took": 51,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 10590250,
"max_score": 1,
"hits": [
{
"_index": "booktest",
"_type": "ktest",
"_id": "22608505",
"_score": 1,
"_source": {
"@timestamp": "2019-02-28T07:37:26.144Z",
"book_no": 22608505,
"book_photo": "",
"book_isbn": "8985319051",
"book_title": "혜능 - 중국선종의 육조",
"book_id": "osn0076",
"@version": "1",
"book_price": "6000"
}
}
이러한 형태로 나타난다.
Took은 쿼리 실행에 소요된 밀리초 시간이다.
time_out은 검색동안 타임아웃 발생여부를 표시하며 이게 발생할 경우 일부 정보만을 얻거나 결과가 없을 수 있다.
_shard는 샤드의 상태를 다음처럼 구분한다.
Total : 샤드 개수
Sucessful : 쿼리가 성공한 샤드 개수
Failed : 쿼리 실행 도중 특정 에러나 예외가 발생해서 쿼리가 실패한 샤드 개수
Hits는 다음으로 구성된 결과다.
Total: 쿼리가 매치된 도큐먼트 개수
Max_score : 첫 도큐먼트의 매치 점수. 정렬 또는 필터링에서 연산한 매치 점수가 없다면 일반적으로 1이다.
hits: 결과 도큐먼트 목록이다.
결과 도큐먼트에는 많은 필드가 있으며 주요 필드는 다음과 같다.
_index : 도큐먼트가 있는 색인
_type: 도큐먼트의 타입
_id: 도큐먼트 ID
_source(기본 필드로 반환되지만, 비활성화 가능): 원본 도큐먼트
_score: 도큐먼트 쿼리 점수
이 외에도 mapping, analyzer, bulk, search에 대한 방대한 내용이 있으나 여기서는 전부 다룰 수 없다. 위의 내용은 공식 문서, 책이나 구글을 통해 직접 원하는 지식을 공부해서 적용할 수 밖에 없다. 색인의 매핑, 검색의 활용, 쿼리의 조건과 관련된 것들은 무척이나 다양하기 때문에 ES를 적절히 활용하기 위해서는 꾸준히 기능을 분석하고 적용해보는 과정이 필요하다.
'ELK stack' 카테고리의 다른 글
[검색엔진 라이브서치 개발과정 정리] Logstash JDBC 활용 및 ES plugin 설치 (0) | 2019.05.27 |
---|---|
[검색엔진 라이브서치 개발과정 정리]ELK stack의 설정 - Elasticsearch (0) | 2019.05.20 |
[검색엔진 라이브서치 개발과정 정리]ELK stack의 설치 (0) | 2019.05.17 |
[검색엔진 라이브서치 개발과정 정리]ElasticSearch 와 기존 RDBMS 와의 비교 (0) | 2019.05.16 |
[검색엔진 라이브서치 개발과정 정리]ElasticSearch의 개요 (0) | 2019.05.16 |