기본 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
,

랜섬웨어 감염시

IT 2017. 12. 30. 10:22

랜섬웨어에 감염되어 파일들이 확장자가 변경되면서 실행이 안된다면..


1. windows/system32/tasks  밑에 가서, 날짜를 보고 최근 것들을 지운다.

  => 랜섬웨어 동작을 멈추게 한다.

  (그 후 고클린 등으로 각종 clear작업을 해주면 더 좋다)


2. 이미 감염된 파일들은 복구가 불가능 한데, 

   https://www.nomoreransom.org/ko/index.html   여기에 가면 일부 복구가 되는 랜섬들이 나열되어 있으므로

   따라서 복구를 한다.

Posted by yongary
,

spring boot로 Web Project생성하기.


1. https://start.spring.io/  에 접속해서  maven/gradle을 선택하고 이름만 넣으면  springboot프로젝트를 생성할 수 있다.  

   => 일반 application이 생성된다.


  1.1  IDEA나 eclipse에서 import project를 해서 열어서 Run만 시키면 돌아간다. (아래과 같이 spring을 볼수 있다)

    .   ____          _            __ _ _

 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )

  '  |____| .__|_| |_|_| |_\__, | / / / /

 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::        (v1.5.9.RELEASE)



2. Build.gradle을 열어서  아래 한줄을 추가한다.   (JDK1.8기준)


compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.4.7.RELEASE'
(version: '1.4.7.RELEASE')

 

   ==> 자동으로 Web Application이 된다. 실행도 되고 localhost:8080 접속도 된다.


3.  jsp처리기능이 아직없으므로 이를 위해 2개 더 추가한다. (REF1, ) 

    

compile group: 'javax.servlet', name: 'jstl', version: '1.2'
compile group: 'org.apache.tomcat.embed', name: 'tomcat-embed-core', version: '8.5.24'
compile group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '8.5.24'

   

     (그리고, resources밑에 있는 application.property에  아래 4번 경로와 suffix를 추가한다)

     


spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp



4.  src/main  밑에  /webapp/views  밑에    jsp생성  (REF2-jsp) 

     
  jsp첫줄에는 아래 한줄이 필요하고..

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

 그 후 <html> tag야 있으면 좋고..





별첨: 간단한 Junit4 Test코드.... + RestTemplate는 여기 참조:   REF

         Lombok사용시 - 설정에서 컴파일러 옵션 중 Annotation Process 체크필요.

Posted by yongary
,

MVC개념

springBoot gradle 2017. 12. 29. 21:56

      USER가 url을 요청한다던지 하는 action을 하면, controller가 받아서 

     Model을 조회/변경하고 그걸 다시
     View에서 그려준다.  


    3가지가 분리되어서 업무분리 개발분리가 가능해진다. 

Posted by yongary
,

1. 해시캐시 (HashCache)

   - 해시함수를 fn(X) = Y 로 표현한다면, X는 입력값 Y는 출력값이다.
     이 중에서 이쁜 Y를 만들기 위해 X를 바꿔가며 입력할 수 있는데, 
     이쁜 Y를 만든 X를 HashCache라고 부를 수 있다.
    

     그런데 X에는 자동으로 고정되는 값이 몇개 포함되어 있어야 하고, 
     사용자가 임의로 설정할 수 있는 값도 있어야 한다.

     즉, 수신자의 메일주소와 같이 바꿀 수 없는 값 + 사용자가 임의설정 가능한 카운터 = X로 했을때
     이쁜 Y를 만들 수 있는 X를  HashCache라고 부를 수 있다.


     (해시캐시의 개념은 스팸메일 필터링에서 나온 개념이므로 수신자의 메일주소를 주로 포함한다.

     90년대 국제표준에서는 Y의 앞자리20자리가 0이 되는 X값을 해쉬캐시로 정했었다.)



2. Nonce
   - 위 예제에서 사용자가 설정한 임의의 카운터를 Nonce라고 부를수 있다.  나머지 고정된 값들을 제외한 사용자가 

      고생을 해서 산출해야 하는 값이다.

   - 이쁜 Y라고 부르는 이유는, Y값의 범위를 정하거나 모양등을 정하므로서, 알고리듬의 복잡도가 탄생한다. 

      즉, Y값을 000000000xxxxxxx 이런식으로 고정한다면, 이를 위해서 사용자는 nonce를 여러번 생성해봐야지 적당한 nonce를 구할 수 있다.

   - 비트코인에서는 총32Byte(256bit) 중,  앞자리 40 bit가 0이어야 한다.



이러한 해시캐시(Nonce포함)개념으로 하나의 블록을 생성한다. 


3. 블록체인

  - 앞에서 설명한 하나의 블록을 여러개 연결한게 블록체인이다.

  - 연결방식은 뉴블록 = 직전블록의 Hash값 +  뉴데이타 + 뉴Nonce 이다.   

   - 뉴뉴블록 = 뉴블록 Hash값 + 뉴뉴data + 뉴뉴nonce로  항상 직전 Hash값만 포함한다.

     이것만으로도 이전의 모든 블록들을 마치 다 포함하는 것처럼, 앞 선 모든 블록들을 아무도 고치지 못하는 효과가 생긴다. 


 

  




Posted by yongary
,

이더리움

블록체인 2017. 12. 26. 11:57

비트코인 다음으로 인기가 많은 이더리움에선 다음과 같은 용어들이 사용된다.


Wei:   1ETH = 1000 0000 00 GWei. (1Gwei:0.001원 정도,  만개쓰면 10원.  1ETH가 100만원일 때)

          1 Ether = 1000000000000000000 Wei 


GasPrice: cost of computation - 계산비용으로서 모든 operation에 대한 계산비용이 trasaction originator에게 지불이 된다.

           :  Gas is a unit of measurement for computational steps. Every transaction is required to 

            include a gas limit and a fee  that it is willing to pay per gas (that is, pay per computation) 


GHOST (Greedy Heaviest Observed Subtree) - 기존 longest chain대비 heaviest chain개념을 도입하여

                   이를 기준으로 가장 계산이 많이 사용된 chain을 결정한다. 




SmartContract:  code is law라는 슬로건아래 코드에 적히면 모두 계약이 된다.


Solidity:  smartContract를 가능하게 하는 튜링완전성을 지닌 script언어 - REF



Bootstrap node:

mainnet vs testnet:  mainnet이 주 network이고 testnet은 개발용.

Whisper & Swarm : 분산 프로토콜 & 분산 디스크.



Geth (Go-Ethereum) :  brew tap ethereum/ethereum ->  brew install ethereum

JSON-RPC : https://github.com/ethereum/g o-ethereum/wiki/JavaScript-Console


 


Mist: 이더리움 client


casper: POS(proof-of-stake) 의 단점을 보완하는 프로토콜. 
            POS는 컴퓨팅파워가 아니라 지분에 비례한 확률로 next block이 선정된다.

           이더리움이 현재는 POW방식이지만 2018년 중에 POS로 바뀔 예정.


dApp: 

         개발환경을 SPA로 해서 웹기반으로 하는 경우가 많은데
        Meteor.js를  사용하기 좋다고 한다.  Meteor REF

        필자는 react.js + springBoot로 해볼 예정.

        


faucet:


truffle contract: 




parity + Aura protocol:  POA(Authority)를 지원하므로 private형태나 은행협의체 형태의 blockchain을 개발하고자 할때 유용하다.


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
,