본문 바로가기

Monitoring/Elasticsearch

(12)
12. Aggregation 통계 (aggregation) 옵션을 이용하면 query 에 따른 documents 의 통계 결과를 알 수 있다. aggregation 옵션의 설명과 사용에 앞서 테스트용 데이터를 입력하자. POST /order/default/_bulk GET /order/default/_mapping { "order" : { "mappings" : { "default" : { "properties" : { "lines" : { "properties" : { "amount" : { "type" : "float" }, "product_id" : { "type" : "long" }, "quantity" : { "type" : "long" } } }, "purchased_at" : { "type" : "date" }, "sa..
11. Query Result Options Select the output field 특정 field 만 output 결과에 설정하려면 _source 옵션을 사용한다. 아래와 같이 다양한 방식으로 설정 가능하다. GET /recipe/default/_search { "_source" : ["user", "created_at"], "query" : { "term" : {"title" : "test"} } } GET /recipe/default/_search { "_source" : false, "query" : { "term" : {"title" : "test"} } } GET /recipe/default/_search { "_source" : "user", "query" : { "term" : {"title" : "test"} } } GET /r..
10. Joining Query Relation 관계형 DB 에는 엔티티간에 키를 설정하여 연결을 설정한다. 예를 들어 특정 부서가 어떤 도시에 속해있는지를 관계형 DB 로 표현하면 아래와 같이 스키마를 만들고 데이터는 아래와 같이 각 부서별 도시를 포인팅하는 방식으로 저장 공간이 효율적으로 사용되며 데이터를 읽기 위해서는 두 Table 을 Join Query 하여 그 결과를 얻을수 있다. Denormalized Database NoSQL 은 기본적으로 RDBMS 방식의 관계 (엔티티를 키로 연결하는 것) 를 지원하지 않는다. 따라서 관계를 비정규화 하는 방식으로 데이터를 저장한다. 예를 들어 아래의 category 를 비정규화 하면 User_messages 에 category 이름을 직접 저장함으로써 User_messages 테이블에..
09. Compound Query Compound Query 앞서 이미 query 의 종류에 대해 살펴보았고 지금까지 본 모든 query 는 leaf query 로 이는 Elasticsearch query 의 기본이 되며 주어진 fields 에 대해 값을 검색시 하나의 operation 만 허용한다. ( n field + 1 operation ) 이에 반해 compound query 란 이런 leaf query 의 조합으로 다수의 operation 을 조합하는 것이다. Query type context vs Filter type context Compound query 는 query type context 와 filter type context 를 구분하여 조합하게 되는데 context 는 한글로 표현하자면 "절" 이다. 바꿔말하면 qu..
08. Query Search Method 아래는 일반적으로 Elasticsearch 에서 사용되는 search API 의 형태로 DSL 쿼리를 많이 사용한다. 예를 들어 아래 DSL 쿼리는 description value 가 read wine 과 match 되는 documents 를 찾도록 시도하게 된다. 좀 더 간단하게 value 를 따로 넣지 않고 direct 로 넣어도 된다. 다음과 같은 쿼리를 URI 쿼리라고 하는데 이를 DSL 쿼리로 바꾸면 다음과 완전히 동일하다. Query DSL Types Elasticsearch 는 match, term, range 등의 Leaf query 와 bool, dis_max 같은 복합 Query ( Leaf query 를 조건식으로 결합하는 query ) 를 제공한다. 아직 아..
07. Analyzer Elasticsearch 에 텍스트 입력시 필드를 인덱싱하고 Documents 화 할때 Lucene 엔진에 의해 텍스트가 분석되어 입력된다. 이때 텍스트를 분석하는 엔진을 Analyer 라고 한다. Lucene 에서 제공하는 Analyer 는 하나의 Tokenizer 와 다수의 Filter 로 구성된다. Filter 는 CharFilter 와 TokenFilter 의 두 가지가 있는데 CharFilter 는 입력된 문자열에서 불필요한 문자를 normalization 하기 위해 사용되며 TokenFilter 는 tokenizer 에 의해 분해된 token 에 대한 Filter 처리를 하게 된다. 기본적으로 CharFilter 에 의해 공백 콤마 등의 문자를 삭제하며 예로 문서의 유형별로 xml 일 경우 의..
06. Mapping Mapping 은 관계형데이터베이스에서 스키마 개념과 동일하다. 지금까지는 Mapping 없이 Elasticsearch에 데이터를 넣었지만, Mapping 없이 데이터를 넣는것은 매우 위험하다. 예를 들어 데이터에 날짜를 넣는데 그게 날짜인지 아닌지 모르며 타입형에서도 혼선이 올 수 있다. Kibana로 시각화 할때 date 타입으로 보여주고 싶어도 형이 안맞으면 적절한 출력이 안될 수도 있다. 따라서 데이터 관리를 위해서라도 Mapping 을 먼저 추가하는 것이 분석이나 시각화할때 도움이 될 수 있다. https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html Data Type Mapping 을 하기 위해 Elasticsea..
05. Document CURL 을 사용한 경우 아래 사이트를 통해서 기본 사용법을 읽히면 된다. https://12bme.tistory.com/171 Order Form Elasticsearch 로 명령을 주는 형태는 아래와 같다. /// ... Result ?pretty 를 붙여주면 Result Json 을 읽기 쉬운 모양으로 결과값이 리턴된다. Creating an Index document 는 인덱스 내부에 생성해야 하므로 먼저 index 를 만들어 보자. 인덱스를 생성할 때는 PUT 명령을 사용하며 간단히 아래와 같은 방법으로 product 라는 이름의 Index 를 추가할 수 있다. 결과값을 통해 index 로 product 가 지정되었음을 알 수 있다. Add 인덱스를 추가하였으니 이제 인덱스에 들어갈 Docume..