본문 바로가기

SearchDeveloper/ElasticSearch

(11)
[Elasticsearch] action.auto_create_index 를 설정하자 색인 시 인덱스 자동 생성을 방지해줄 수 있는 action.auto_create_index 설정을 해보자최종 elasticsearch.ymldiscovery.type: single-nodebootstrap.memory_lock: trueaction.auto_create_index: ".watches,.triggered_watches,.watcher-history-*"xpack.ml.enabled: falsenetwork.host: 0.0.0.0 ES 7.1.11. elasticsearch.yml 에 action.auto_create_index=false 설정항상 컨네이너 삭제 후 재시작함(에러) 컨테이너 뜰 때 Caused by: java.lang.IllegalArgumentException: the [..
[ElasticSearch] update_by_query version_conflict_engine_exception & update 쿼리 비교 문제운영 중인 인덱스 문서를 update_by_query 로 실시간으로 업데이트하는 배치를 만들었다. 운영 환경에서 첫 테스트를 하는데 몇 초 지나더니 version_conflict_engine_exception 에러가 간헐적으로 발생하기 시작했다.해결update_by_query 를 bulk update 로 바꿨다.[기존]POST my_index/_update_by_query{ "query": {"term": {"_id": {"value": "1"}}}, "script": { "source": "ctx._source.updated_by_query = true", "lang": "painless" }} [변경후]POST _bulk{"update": {"_index": "my_index",..
[ElasticSearch] synonym_graph 의 start_offset, end_offset, position, position_length 이해하기 엘라스틱서치의 _analyze 는 analyzer 분석 결과를 확인할 수 있는 API 이다. explain:true 옵션을 주면 토큰들의 위치 관계를 파악할 수 있는데, 특히 synonym_graph 토큰 필터가 적용된 analyzer 에서는 동의어가 포함된 토큰 관계를 이해하는데 유용하다. explain:true 에 포함된 필드 중 start_offset, end_offset, position, position_length 를 분석해 토큰들 간의 연결 관계를 파악하는 법을 확인보려한다. 이 블로그 글은 ES 공식 문서 초반 부분에 대한 자세한 설명이 될 것이다. In order to properly handle multi-word synonyms this token filter creates a gra..
노리 형태소 분석기 이해하기 (2/2) 이 글은 ES 공식 블로그 공식 한국어 분석 플러그인 “노리” 내용 중 어떻게 형태소를 분석하는 가에 대해 중점을 둔 글이다. 공식 블로그를 먼저 읽어보고 이해를 돕기 위해 이 글을 읽는 것을 추천한다! (사실 노리라 쓰고 mecab 얘기를 더 많이했는지도 모른다😅) 버전 mecab-ko-dic-2.1.1-20180720 mecab-0.996-ko-0.9.1 2 더 좋은 분석임을 판단하는 기준 한국어형태소분석기 라는 명사구를 어떻게 분리하면 좋을까? 한국어 / 형태소 / 분석기 로? 아니면 한국어 / 형태 / 소분 / 석기 로? 사람이 보기에는 한국어 / 형태소 / 분석기 로 분리하는게 적절해 보인다. 한국어 / 형태 / 소분 / 석기 로 분리하기에는 뭔가 안어울리는 단어들끼리 붙어있다는 느낌이 들지 않..
노리 형태소 분석기 이해하기 (1/2) 노리는 Lucene 7.4 (= ElasticSearch 6.4) 부터 제공되는 ES 공식 한국어 형태소 분석기이다. 노리 가 만들어지기까지 어떤 과정을 거쳐왔는지 살펴보고, 다음글에서는 노리가 어떻게 문장에서 형태소를 분석하는지 알아볼 것이다. 노리가 세상에 나오기까지 💡 말뭉치가 뭐야? 도서관,1781,3535,2110,NNG,*,T,도서관,Compound,*,*,도서/NNG/*+관/NNG/* 이런거다. 예를 들면 형태소 분석기를 만든다고 할 때, “[도서관]은 일반명사인 [도서]와 일반명사인 [관]으로 분리돼” 같이 학습을 위해 필요한 데이터를 뜻한다. (노리는 81만개 이상) 영어로는 코퍼스(corpus) 라고 부른다. 1. 노리의 조상은 mecab 이라는 일본어 형태소 분석엔진이다. mecab ..
[트러블슈팅] Too many dynamic script compilations within, max: [75/5m] 현상 새롭게 만든 엘라스틱서치 검색 API 를 개발, 스테이지 환경에서 테스트를 마치고 긴장되는 마음으로 운영에 배포를 했는데... 이럴수가 엄청난 에러들이 뚜두두두 쏟아지는게 아닌가 org.elasticsearch.transport.RemoteTransportException: [indices:data/read/search[phase/query]]Caused by: org.elasticsearch.script.GeneralScriptException: Failed to compile inline script [if(doc['name.keyword'].value.toLowerCase().contains('디스프')) return 1; return 0;] using lang [painless] ...Cau..
ElasticSearch Full GC 해결 과정 8월 3째주 세상이 멈췄다 엘라스틱서치를 사용하는 서비스 API 에서 간헐적으로 circuit breaker 가 오픈됐다. circuit breaker 가 오픈되는 이유 중에 하나는 API 반환이 제 시간에 되지 못했다는 것이다. 그 시간대에 엘라스틱서치에 무슨 일이 있었나 키바나로 확인해 보니 세상에나! Full gc 수행시간이 600 ms 가량 치솟았다. 한 번만 발생한 거라면 살짝 넘어갔겠지만.. 간헐적으로 발생하고 있었기에 조치가 필요했다. 여러 대안이 있었고 그 때 당시 Heap 메모리 사용량이 90% 에 육박했기에 메모리를 30% 가량 증설하였다. ♣ 노드 하나당 힙 메모리: 24G → 32G 8월 4째주 해결된 듯 했으나 메모리 증설 후 며칠동안 상황을 지켜봤는데 이런.. Full GC 가 ..
ElasticSearch refresh, flush API 동작 원리 (2): ElasticSearch 관점 + translog https://elsboo.tistory.com/19 ElasticSearch refresh, flush API 동작 원리 (1): Lucene 관점 https://elsboo.tistory.com/18 ElasticSearch Lucene 인덱스 구조 엘라스틱 서치는 현업에서 많이 쓰이고 있는 오픈소스 검색엔진이다. 역색인 구조로 문서를 색인하며, 근실시간으로 문서를 검색할 수 있다. elsboo.tistory.com 이전 글에서는 엘라스틱서치의 refresh, flush 동작 방식을 루씬 관점에서 살펴보았다. 이번 글에서는 동작 방식을 육안으로 확인해보고 엘라스틱서치가 제공하는 기능인 trasnslog 에 대해서도 알아볼 것이다. 루씬에서 세그먼트를 생성하는 2가지 작업을 엘라스틱서치에서는 다른 용어..
ElasticSearch refresh, flush API 동작 원리 (1): Lucene 관점 https://elsboo.tistory.com/18 ElasticSearch Lucene 인덱스 구조 엘라스틱 서치는 현업에서 많이 쓰이고 있는 오픈소스 검색엔진이다. 역색인 구조로 문서를 색인하며, 근실시간으로 문서를 검색할 수 있다. 하지만 색인, 검색 기능을 엘라스틱 서치에서 직접 elsboo.tistory.com 이전 글에서는 엘라스틱서치 인덱스의 전체적인 구조에 대해 알아보았다. 이번에는 두 편에 걸쳐 /refresh, /flush API 의 동작 원리에 대해 알아보겠다. 엘라스틱서치에서 문서 색인 작업은 루씬이 담당하기 때문에 루씬과 엘라스틱서치 모두 어떻게 일하는지 살펴보고 동작 방법을 육안으로도 확인해볼 것이다. 문서 색인 요청을 하면, 루씬은 곧바로 세그먼트를 생성하지 않는다. 왜냐면 ..
ElasticSearch Lucene 인덱스 구조 엘라스틱 서치는 현업에서 많이 쓰이고 있는 오픈소스 검색엔진이다. 역색인 구조로 문서를 색인하며, 근실시간으로 문서를 검색할 수 있다. 하지만 색인, 검색 기능을 엘라스틱 서치에서 직접 구현하지는 않는다. 해당 기능은 루씬이라는 오픈소스 자바 라이브러리를 임포트하여 사용한다. 즉, 엘라스틱 서치는 루씬이라는 검색 라이브러리를 코어로 하여 이것에 REST API, 관리 기능 등 여러가지 편의 기능을 붙인 검색엔진이다. 그래서 엘라스틱 서치의 인덱스 구조를 내핵까지 파헤친다면 그 끝은 결국 루씬이 만들어주는 역색인 구조의 파일이다. 그럼 엘라스틱 인덱스를 양파 까듯 까보자! 엘라스틱 서치 인덱스 ⊃ 샤드 ⊃ 루씬 인덱스 ⊃ 세그먼트 ⊃ 도큐먼트 먼저 인덱스를 하나 생성한다. PUT elsboo_index {..