'ElasticSearch'에 해당되는 글 10건

  1. 2018.06.04 _bulk 삽입을 실행하는 shellscript
  2. 2018.04.06 복합Query
  3. 2018.01.22 특수기능
  4. 2017.12.31 기본 Query예제
  5. 2017.12.16 custom Kibana Visualization 만들기
  6. 2017.12.16 test data로딩 및 sense로 테스트
  7. 2017.12.15 Java Rest Client
  8. 2017.12.15 Aggregation
  9. 2017.11.16 Beats for ElasticSearch
  10. 2017.10.17 ELK Stack

_json파일을 만들어서, _bulk로 elastic에 데이타를 넣는게 가장 빠른것으로 보인다.

단, batch파일은 10만건 정도가 적당하고..

이렇게 할 경우 batch파일이 너무 많아지므로,

아래와 같이 shellscript를 만들어서 일괄 삽입하는 게 좋다.


윈도우즈의 경우는 git 윈도우용을 깔아서, git bash등에서 실행하는 걸 추천한다.




#!/bin/sh


for ((i=130;i<258;i++)); do

fName='@modonBatchElastic'$i

RUN_COMMAND='curl -u elastic:changeme -s -H Content-Type:application/x-ndjson 

                   -XPOST 210.92.91.234:9210/_bulk --data-binary '$fName

echo $RUN_COMMAND

echo `$RUN_COMMAND`

done




참고: json포맷 - 2줄당 data한건 삽입

{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }

{ "field1" : "value1" }

{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "2" } }

{ "field1" : "value2" }

Posted by yongary
,

복합Query

ElasticSearch 2018. 4. 6. 09:44

엘라스틱을 사용하다 보면 여러가지의 Query를 복합해서 사용해야 하는 경우가 있다.


잘 섞이는 Query는

  must, must_not, should  + (filter)이며 아래와 같이 "bool"로 연결한다.   REF


{
    "bool": {
        "must":     { "match": { "title": "how to make millions" }},
        "must_not": { "match": { "tag":   "spam" }},
        "should": [
            { "match": { "tag": "starred" }}
        ],
        "filter": {
          "range": { "date": { "gte": "2014-01-01" }} 
        }
    }
}


Posted by yongary
,

특수기능

ElasticSearch 2018. 1. 22. 21:38

template: 여러개의 template을 지정해 놓을 수 있음.

     -> 잘못 사용하면 여기에 계속 걸려서, insert가 안되는 경우도 있으니 조심필요.



join: 부모-child관계 지정.   (예:질문-답변)  REF

       RDB의 relation과 어느정도는 유사하게 사용이 가능하지만,

       one-to-many 관계에서만 사용하는 게 좋다. 

       (그리고, 한 index안에서만 사용한다 )


 -Relation: 부모와 자식관계 설정

 -Child 여러 개 설정 가능

- (손자)Child 밑에 Child를 둘 수 있음





_segment: segment내의 data까지 조회가 가능하다.





Posted by yongary
,

기본 Query예제

ElasticSearch 2017. 12. 31. 08:22


kibana필터 기본 문법:   REF - 루씬 문법임. . 

     title:(+return +"pink panther") : Field grouping - REF

  

timeliion 문법: REF



== 그 외 아래는 elastic 기본 Query예제이다. ====================================

 



  Index데이타넣기 + 자동생성 : REF


PUT /twitter
/doc/1 (1은 생략시 자동생성) { "user" : "kimchy", "post_date" : "2009-11-15T14:12:12", "message" : "trying out Elasticsearch" }



Index 생성 및 Mapping 조정: REF

PUT twitter :생성 {} PUT twitter/_mapping/_doc { "properties": { "name": { "type": "text" } } } //type:keyword가 중요

데이타 타입: REF



문서하나 Delete:

    DELETE /twitter/_doc/1

   


 Delete Index:

 DELETE /twitter






  Match:  REF


GET entry/_search

{

  "query": {

    "term": {"play_name":"Hamlet"}

  }

}


GET entry


GET /_search { "query": { "match" : { "message" : "this is a test" } } }



Posted by yongary
,


kibana에서 


search 구문 예제: 

text:java AND NOT(text:hiring) AND users.some_count[500 to *] 

timelion 구문: ref

.es(q=(text:java)).divide(.es(q=(text:kotlin)).multiply(100)





========================만들기 =============================

REF- 웹강의 와 sample소스가 있음.   REF-개요페이지


      강의내용중 URL :  plugin 개발-UI Exports 



js로 

1. visController  class 를 만든다. (ES6 js일듯)

  - constructor

  - render

  - destory 함수가 있는데..   예제에선 text만 뿌리는 수준이다.


2. visualization class를 만든다.

  


To follow along during the webinar:

  • Set up your Kibana development environment (preferably the master branch)
  • Use sample code from the webinar to create your own visualizations
  • Reference Contributing to Kibana Github repo for any issues

Related Resources: 



멋진 그림을 그릴 수 있으려나...  스터디 중.



Posted by yongary
,

 elastic 을 설치한 후,  curl로 test를 하는게 약간 귀찮게 느껴 진다면


Sense 에디터를 이용해서 test하는 게 편하다.  (PUT data.json을 바로 이용하는 느낌으로 사용)

Sense는 Kibana의 일부(plugin) 이기 때문에 kibana설치 후 사용이 가능하다. REF


  ==> 요즘은 (5.x부터)  Kibana만 설치하면  Dev Tools메뉴에서 바로 사용 가능.

  

 query명령어는 여기를 참조해서 공부한다.  REF(elastic 영문사이트)





그리고 참,  혹시 elasticsearch에 data가 없다면  이 sample data를 이용한다. REF





Posted by yongary
,

Java Rest Client

ElasticSearch 2017. 12. 15. 17:40

ElasticSearch용 java client를 구현하는 방법은 여러가지가 있다.


app으로 REST를 구현해도 되고

jest를 이용하거나

spring-data-elasticsearch  를 이용해도 된다.



spring 이용해서 간단하게 해보고 싶으면 여기추천:  REF





하지만, 일단은 공식 java client를 먼저 검토추천 한다고 하는데..(개인적으론 아직 익숙치 않아서인지 불편해 보인다) 

(node간 통신시 binary포맷으로 바꾸어야할 필요성도 있다고 하는데? 그래서 공식 client가 좋은건가? 싶은데 검토필요)


공신 client 사이트는 : REF  javadoc


사용법은 

Map<String, String> params = Collections.emptyMap();
String jsonString = "{" +
            "\"user\":\"kimchy\"," +
            "\"postDate\":\"2013-01-30\"," +
            "\"message\":\"trying out Elasticsearch\"" +
        "}";
HttpEntity entity = new NStringEntity(jsonString, ContentType.APPLICATION_JSON);
Response response = restClient.performRequest("PUT", "/posts/doc/1", params, entity); 



이 예제   elastic core 를 이용하고 있군요.. javadoc

Posted by yongary
,

Aggregation

ElasticSearch 2017. 12. 15. 17:11



REF (한글개념)   REF(영문 aggregation)   


Elastic에서 복잡한 검색은 mongoDB에서처럼 aggregation이란 용어를 사용해서 수행한다.



- Metric Aggregation: 산술식 

    : script Aggregation:   map & reduce방식으로 script를 이용해 동작할 수 있다. ref

    : Cardinality Aggregation:   distinct count 느낌.  ref (cardinal=기수, 즉 1234에서 10진수 기수는 4개)



- Bucket Aggregation: 그루핑
   : filter Aggregation:  group by느낌이고  where절을 filter에서 거는 느낌으로 사용한다. ref

    


- Matrix  :  멀티Field.    단, scripting은 미지원.


- Pipeline   : aggregation + aggregation





Posted by yongary
,

가벼운(lightweight) 확장가능한 data shippers.  data를 수집하고 shipping.

  (logstash가 무겁기 때문에 가볍게 만든 agent?)



Libbeat - 기본 라이브러리 

   Config

   Setup

   Run  - 데이타를 elasticSearch나  logstash로 전송. 

   CleanUp

   Stop  

   의 함수들을 구현(override)하면 새로운 beat을 만들 수 있음.



Packetbeat - 클라이언트에서 서버로 보내지는 데이타를 수집 

Topbeat - 시스템정보 수집

 -> 5.0부터 MetricBeat로 바뀜.


그외에도 각종 beat들이 만들어지고 있음.



  나만의 beats만들기 REF REFY



Posted by yongary
,

ELK Stack

ElasticSearch 2017. 10. 17. 16:16

공식사이트: elastic.co

REF


기본적으로 elasticSearch가 근간인데

elasticSearch를  DB와 비교해서 가장 큰 차이점을 생각해 보면


   1. 속도가 빠르다.. DB는 B-tree인데 elastic은 hash를 사용.
       (물론 No-SQL DB중에는 redis등과 같이 hash사용하는 애들 있죠..)


   2. Fuzzy개념이 있다.
       (DB에서는 정확하게 입력한 query에 대한 결과가 나오지만,  

        elastic은 검색엔진 기반이다 보니,   Fuzzy하게 혹은 가중치있게 검색할 수 있다.. 적당히 알아서 유사한 것들이 검색된다) 



==============================================


elasticSearch에 data를 넣고,

kibana를 통해 그래프 형태로 조회 한다.


Logstash는 elasticSearch에 data를 대용량으로 넣을때 주로 사용한다.



<ElasticSearch>

키워드 : doc1, doc2 이러한 식으로 저장이 됨.  O(1)의 HashTable이라고 생각하면 됨. 

     ==> 따라서 search가 매우 빠름. (redis와 


Index - db (RDB용어)

Type - table

document - row

Mapping -scema


(실습)

$curl -XGET http://localhost:9200/classes
                                                         +  /class/1 -d  someData

$curl -XPUT localhost:9200/classes    (Update명령이지만, index생성시에는 PUT을 사용함)

                      

$curl -XPOST localhost:9200/classes/class/1 -d  @json파일          (INSERT) 
                                                             document생성은 POST로 하면 index와 함께 생성되기도 함.


?pretty : 이쁘게 출력해 줌.


    - geo_point같은 data를 type 매핑해주면 geo data로 관리가 되서, kibana 지도에서 쉽게 표시 가능.
    - 


<Kibana>

Discover메뉴 - 필드별 조회/검색 등.

Visualize에서 x 축 y축 고르면 쉽게 그래프로 표시할 수 있으며, 해당 링크만 이용할 수 있음.



<logstash>

 - (CSV)file, mySql, mongoDB, ActiveMQ등 data들을 포맷을 바꿔 elasticSearch에 넣을 수 있음.

 - .conf 파일을 이용함.  $sudo ./logstash -f logstash.conf 
          ( input  / filter / output을 지정. output을 주로 elasticSearch로 함 -  유투브 ELK스택 강의 18강 참고.



               


 






Posted by yongary
,