elasticsearch
-
분석기 성능 튜닝(정규식)elasticsearch 2021. 12. 5. 16:42
개요 이번에 무신사에서는 블랙프라이데이를 진행하였고 그에 맞춰 상품 관련 노드를 20대를 사용해서 트래픽을 받을 준비를 하였다 그러나 그럼에도 로드가 많이 튀고 cpu 사용량도 엄청 튀는 것이었다 그래서 전체 분석기를 튜닝하지는 못해도 커스텀 분석기 중 튜닝할 만한 게 있나 체크를 하였다 분석 사실 분석이라고 말은 거창하게 했지만 전부터 고치려고 했었던 것이 있었는데 얼마나 좋아지겠어?라고 생각하고 고치지 않았던 것이 있었는데 그것부터 고치려고 했었다 보통 웹에서는 정규식을 사용해 validation을 하거나 string.matches를 많이 사용한다 그 이유는 input 값에 대해 각각 문자를 validation 하기보다는 전체 값을 validation 하기 때문이다 예를들면 모바일만 서비스하는 곳은 ..
-
elasticsearch failed to flush export bulk [default_local]elasticsearch 2021. 5. 2. 17:35
우리 서버에 matrix를 설치한 뒤 보니 failed to flush export bulk 와 같은 에러가 나고 있었다 물론 서비스 이슈는 없었지만 당연히 제거해야 될 에러였다 [2021-04-29T23:27:04,206][WARN ][o.e.x.m.MonitoringService] [xxxx] monitoring execution failed org.elasticsearch.xpack.monitoring.exporter.ExportException: failed to flush export bulks at org.elasticsearch.xpack.monitoring.exporter.ExportBulk$Compound.lambda$doFlush$0(ExportBulk.java:109) [x-pack-..
-
elasticsearch storefield and docvalues and _source 비교elasticsearch 2021. 4. 26. 21:40
store field와 docvalues가 각각 어떻게 저장되는지 알아보고 퍼포먼스가 어떻게 될지 확인해본다 store field는 검색하기 위해 사용되는 필드이다 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-store.html#mapping-store store | Elasticsearch Guide [7.12] | Elastic Stored fields returned as arrays For consistency, stored fields are always returned as an array because there is no way of knowing if the original field value was a..
-
elasticsearch index sorting으로 퍼포먼스 향상elasticsearch 2021. 4. 21. 21:42
sorting index는 루씬에서 sorting을 지원하기 위해 indexSorter라는 것을 도입해 검색 시점이 아니라 색인과 병합 시점에 문서를 정렬하는 방법을 제공하고 검색 포퍼먼스 향상을 위해서 도입된 개념이다 예시를 통해 알아보자 PUT scores { "settings": { "index": { "sort.field": "points", "sort.order": "desc" } }, "mappings": { "properties": { "points": { "type": "date" } } } } GET scores/_search { "size": 3, "sort": [ { "points": "desc" } ] } 쉽게 알기 위해서 1 나의 샤드에서 세그먼트가 1나만 존재한다고 했을 때 인덱..
-
elasticsearch는 어떤 segment 부터 읽을까?elasticsearch 2021. 4. 16. 21:09
오래된 segment? 가장 최근에 만들어진 segment? elasticsearch를 공부하면서 그냥 든 생각이 가장 오래 된 segment이 가장 최적화가 되어있을 가능성(물론 용량이 큰 파일은 삭제된 문서가 어느정도 선일 때는 머지되지 않아 비효율 적일 수도 있음)과 데이터가 많으므로 데이터를 찾을 수 있을 가능성이 더 높다고 생각을 했었었다 그러나 elasticsearch의 기반이 된다는 LSM(log structure merge) Tree를 공부할 때에는 가장 최근에 만들어진 파일부터 읽는다고 해서 궁금해서 여러 자료를 서치해봤지만 내 능력 밖인지 찾지를 못했다 그래서 별거는 아니지만 es는 필터를 주면 들어간 값 대로 리스팅 되므로 그것을 이용해서 테스트 해보기로 했다 인덱스를 생성 PUT m..
-
elasticsearch sprase docvalueelasticsearch 2021. 4. 13. 20:22
docvalue에 대한 기본 개념은 아래 링크를 참고하자 ksk-developer.tistory.com/29 Elasticsearch(with lucene) DocValue 에 대해서 알아보자 루씬은 검색을 효율적으로 하기위해 역색인 구조로 저장하는데 검색 시에는 유리한 구조이지만 정렬, 집계일 경우에는 그렇지 않다 그래서 그것을 보안하기 위해 DocValues란 구조를 사용한다 루 ksk-developer.tistory.com 조금 더 왜 사용하는지 알고 싶다면 아래 링크까지 참고하자 ksk-developer.tistory.com/30 컬럼 기반 저장소 와 행 기반 저장소 컬럼 기반 저장소에 대해서 알지 못했는데 es에서 field_datta, doc_value에 대해서 알아보다 컬럼 기반 저장소를 사..
-
elasticsearch segments 2부elasticsearch 2021. 3. 27. 11:58
색인 작업 시 세그먼트의 기본 동작 방식 루씬 인덱스는 내부적으로 다수의 세그먼트로 구성되어 있다 루씬은 검색 요청을 받으면 다수의 세그먼트 조각들이 각각 검색 결과를 만들어 내고 이를 통합해서 하나의 결과로 합쳐서 응답하도록 설계되어 있다 이러한 검색 방식을 세그먼트 단위 검색(Per-Segment Search)라고한다 루씬은 위의 이미지와 같이 세그먼트들을 관리하기 위한 용도로 커밋 포인트(Commit Point)라는 자료구조를 제공한다 커밋 포인트는 여러 세그먼트의 목록 정보를 가지고 이고 검색시 이를 적극적으로 활용한다 루씬의 IndexSearcher는 검색 요청시 커밋 포인트를 이용해 가장 오래된 세그먼트부터 차례대로 검색한 후 각 결과를 하나로 합쳐서 제공한다 색인 요청이 루씬에 들어오면 In..
-
elasticsearch search type query then fetch and dfselasticsearch 2021. 3. 25. 21:51
GET test/_search?search_type=dfs_query_then_fetch { "query": { "match_phrase_prefix": { "title": { "query": "d", "max_expansions": 5 } } } } 응답 결과 "_score" : 1.0, "_source" : {"title":"drunk"} "_score" : 0.30685282, "_source" : {"title":"dzone"} "_score" : 0.30685282, "_source" : {"title":"data"} "_score" : 0.30685282, "_source" : {"title":"drive"} 왜 "drunk"라는 값을 포함하는 문서의 스코어만 1.0이고 그 외에는 0.3일까?..