[검색엔진 라이브서치 개발과정 정리]Curl 을 통한 기본적인 확인

2019. 5. 22. 12:14ELK 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를 적절히 활용하기 위해서는 꾸준히 기능을 분석하고 적용해보는 과정이 필요하다.