본문 바로가기
ELK/ElasticSearch

ElasticSearch kibana DevTool Springboot Java 사용방법

by by 앵과장 2020. 4. 29.
반응형

 

 

Elastic Search 를 처음 접하고 아무것도 모르는 상태에서 일단 개발에 필요한 최소한에 기능들 위주로

공부하면서 정리한 내용을 공유드립니다.

 

회사에서 데이터가 누적되면서 RDB로는 감당할수 없을정도에 데이터 처리를 위해서는 NoSQL을 사용하는것이 요근래는 

선택이 아닌 필수가 되어가는 현실입니다.

 

ElasticSearch 1.xx 버전에서는 Lucene Query 를 접해보지 않았다면 러닝 커브가 존재하겠지만 

버전업되면서 6.xx 인지 5.xx 인지부터 Kibana 라는 플러그인을 통해서 좀더 쉽게 엘라스틱서치 Document 를 접근하고 가공하기 편하게 되었습니다.

 

Kibana 에 다양한 기능이 제공하지만 이번 포스팅에서는 DevTools 메뉴에서 제공하는

Console 에서 기본적으로 개발에 필요한 기능을 공유드립니다.

 

Console에서 가능한 기능 (추가 적인 사항은 제가 더 엘라스틱 경험치가 쌓이면 추후 업데이트예정)

- Lucene Query GET, DELETE 

- RDBMS(mysql) Query TO Lucene Query translate

- Document 단일 조회 

- Format txt value 조회

 

1. Lucene Query GET, DELETE

엘라스틱에서 적재되어있는 Document 형태 문서를 조회 하거나 삭제할수 있는 기능을 제공합니다.

아래는 샘플링된 예제를 참고하세요

 

GET

GET document-*/_search
{
  "size" : 10,
  "query" : {
    "bool" : {
      "must" : [
        {
          "term" : {
            "field_A" : {
              "value" : "abc",
              "boost" : 1.0
            }
          }
        },
        {
          "range": {
            "end_date": {
              "from" : "2020-04-01T00:00:00"
              ,"to" : "2020-04-30T23:59:59"
              ,"include_lower": false
              ,"include_upper": false
            }
          }
        }
      ],
      "adjust_pure_negative" : true,
      "boost" : 1.0
    }
  },
  "_source" : false,
  "stored_fields" : "_none_",
  "docvalue_fields" : [
    {
      "field" : "field_A",
      "format" : "use_field_mapping"
    },
    {
      "field" : "field_B",
      "format" : "use_field_mapping"
    },
    {
      "field" : "field_C",
      "format" : "use_field_mapping"
    },
    {
      "field" : "field_D",
      "format" : "use_field_mapping"
    }
  ],
  "sort" : [
    {
      "_doc" : {
        "order" : "asc"
      }
    }
  ]
}

DELETE

Elastic Search 에서 생성된 Document 를 삭제할때 사용되며 Query 질의를 통해서 삭제 가능합니다.

주의사항은 실제로 삭제가 되기때문에 꼭 backup 또는 재색인 가능한지 확인 해야합니다.

DELETE document-*
{
  "query" : {
    "bool" : {
      "must" : [
        {
          "term" : {
            "field_A" : {
              "value" : "abc",
              "boost" : 1.0
            }
          }
        },
        {
          "range": {
            "end_date": {
              "from" : "2020-04-01T00:00:00"
              ,"to" : "2020-04-30T23:59:59"
              ,"include_lower": false
              ,"include_upper": false
            }
          }
        }
      ],
      "adjust_pure_negative" : true,
      "boost" : 1.0
    }
  }
}

 

2. RDBMS(mysql) Query TO Lucene Query translate
RDBMS 에서 사용하는 표준 Query 를 엘라스틱에서 사용할수 있는 Lucene Query 로 변환 해줍니다.

변화한 Lucene Query는 100% 완벽호환은 아니며 오동작하거나 내가 원하지 않은 부분에 대해서는 직접 Lucene Query 를 수정하시기 바랍니다.

 

RDB형태 Query를 lucene Query 변경하고자 할경우 아래처럼 

_xpack/sql/translate 기능을 활용하시면됩니다.

GET _xpack/sql/translate
{
  "query": """
  select fieldA,fieldB
  from "document-*"
  where fieldA='abc'
  """
}

해당 내용 실행하면 오른쪽에 lucene Query 결과물 확인 가능합니다.

{
  "size" : 1000,
  "query" : {
    "term" : {
      "fieldA" : {
        "value" : "abc",
        "boost" : 1.0
      }
    }
  },
  "_source" : false,
  "stored_fields" : "_none_",
  "docvalue_fields" : [
    {
      "field" : "fieldA",
      "format" : "use_field_mapping"
    },
    {
      "field" : "fieldB",
      "format" : "use_field_mapping"
    }
  ],
  "sort" : [
    {
      "_doc" : {
        "order" : "asc"
      }
    }
  ]
}

 

3. Document 단일 조회

검색하고자하는 document 에 index가 되는 key정보를 알고있다면 단일로 해당 document를 검색할수 있습니다.

 

 


GET document-202020/doc/2767584518

{
  "_index" : "document-2020",
  "_type" : "doc",
  "_id" : "93804821",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "deal_start_date" : "2019-12-05T21:00:00.000Z",
    "display_sort" : 0,
.
.
.
document 가 길어서 생략합니다.
.
.
.
  "max_count" : 30,
  "dealNo" : 2767584518,
  "contentsUseYn" : "Y",
  "min_count" : 1000,
  "start_date" : "2019-12-05T21:00:00.000Z",
  "amount" : 0,
  "deal.actionFrom" : "tour"
}    

 

참고 사이트

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html