엘라스틱서치: 22개의 글
엘라스틱서치의 구성요소 엘라스틱서치는 기본적으로 클러스터라는 단위로 데이터를 제공한다. 클러스터는 하나 이상의 물리적인 노드로 이루어져 있으며 각 노드는 모두 데이터 색인 및 검색 기능을 제공하는 일종의 물리적인 서버와 같다. 내부에는 루씬 라이브러리를 사용하고 있으며 루씬은 엘라스틱서치의 근간을 이루는 핵심 모듈이다. 1)클러스터 클러스터는 데이터를 실제로 가지고 있는 노드의 모음이다. 엘라스틱서치에서는 관련된 모든 노드들을 논리적으로 묶어서 클러스터라고 부른다. 또한 노드들은 같은 클러스터 내부의 데이터만 서로 공유가 가능하다. 같은 클러스터를 구성하는 노드들을 같은 클러스터 이름으로 설정해야한다. 엘라스틱서치는 설정된 클러스터 이름을 이용해 같은 클러스터의 구성원으로 인식된다. 같은 클러스터 내부의..
이번에 포스팅할 내용은 More Like This 입니다. More Like This 쿼리란 주어진 질의문과 가장 유사한 문서를 찾는 알고리즘입니다. 그리고 해당 알고리즘을 사용하지 위해서는 쿼리를 날릴 필드가 인덱싱되어야하며 분석 속도를 높이기 위하여 term_vector 속성을 지정해주는 것이 좋습니다. 필자를 참고로 간단한 Q&A를 위한 챗봇을 만들기 위하여 해당 알고리즘을 이용하였습니다. 물론 문맥을 이해하는 것이 아니라 유사도를 판단하는 것이지만 나름 성능이 나오는 알고리즘입니다. 모든 예제는 이전에 이용하였던 High Level Rest Client를 이용하였습니다. Index 한글형태소 분석기가 포함된 인덱스를 생성하는 코드입니다. 참고로 질의의 대상이 되는 "question"필드의 term..
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-query-builders.html 엘라스틱서치 Rest Client API Doc Url입니다.
자바 언어를 위해 제공되는 클라이언트에는 두 가지 종류가 있다. 내부적으로 HTTP REST API를 사용해 통신하는 방식과 네티(Netty)모듈을 이용해 네이티브 클라이언트를 통해 통신하는 방식이다. REST Client Transport Client(Netty) Java High Level REST Client라고 불린다. HTTP방식을 이용해 엘라스틱서치와 통신한다. 내부적으로는 HttpClient 모듈을 사용한다. HTTPS 사용이 가능하다. Java Client라고도 불린다. 초기부터 제공되던 클라이언트 방식으로, 상대적으로 빠른 속도를 보장한다. 소켓을 이용해 엘라스틱서치와 통신한다. 내부적으로는 Netty모듈을 사용한다. 초기버전의 엘라스틱서치에서는 소켓을 이용하는 Transport 클라이언..
이번 포스팅에서 다루어볼 내용은 이전 포스팅에서 다룬 한글 형태소분석기를 이용한 기타 고급검색 기법에 대해 다루어볼 것이다. 물론 해당 고급검색에는 간략한 내용만 다루어보고 집계쿼리나 기타 유사도검색 기반 검색들은 다른 포스팅에서 다루어볼 것이다. 이번에 다루어볼 내용들이다. 검색 결과 하이라이팅 스크립트를 이용한 동적필드 추가 검색 템플릿을 이용한 동적 쿼리 제공 별칭을 이용하여 항상 최신 인덱스 유지하기 스냅샷을 이용한 백업과 복구 위 내용들을 다루어볼 것이다. 검색의 성능을 향상시키거나 그런 내용은 아니지만 알아두면 아주 유용한 기능들이기에 다루어볼 것이다. 검색결과 하이라이팅 하이라이팅은 문서 검색 결과에 사용자가 입력한 검색어를 강조하는 기능이다. 해당 기능을 통해 사용자가 입력한 검색어가 어디..
엘라스틱서치 혹은 솔라와 같은 검색엔진들은 모두 한글에는 성능을 발휘하기 쉽지 않은 검색엔진이다. 그 이유는 한글은 다른 언어와 달리 조사나 어미의 접미사가 명사,동사 등과 결합하기 때문에 기본 형태소분석기로는 분석하기 쉽지 않다. 그렇기 때문에 검색엔진을 한글에 적용하기 위해서 별도의 한글 형태소 분석기가 필요하다. 솔라도 물론 가능하고 엘라스틱서치도 역시 한글 형태소 분석기를 내장할 수 있다. 이번 포스팅에서 다루어볼 한글 형태소 분석기는 요즘 뜨고 있는 Nori 형태소분석기를 플러그인 할 것이다. Nori 형태소 분석기는 루씬 프로젝트에서 공식적으로 제공되는 한글 형태소 분석기로써 엘라스틱서치 6.4버전에서 공식적으로 배포됬다. 내부적으로 세종 말뭉치와 mecab-ko-dic 사전을 사용하며, 기존..
엘라스틱서치는 대량의 데이터를 처리하기 위해 기본적으로 데이터를 분산해서 처리한다. 검색요청이 발생하면 엘라스틱서치는 모든 샤드에게 브로드캐스트 방식으로 동시에 요청을 보내고 각각 샤드들이 데이터를 검색한후 결과를 반환하면 엘라스틱서치는 모든 결과를 취합하여 사용자에게 검색 결과를 전달한다. 이러한 동작 방식 때문에 제공되는 부가적인 환경설정값이 있다. 동적 분배 방식의 샤드 선택 엘라스틱서치는 부하 분산과 장애처리를 위하여 원본 샤드 + 복제 리플리카 샤드를 운영한다. 물론 원본 샤드와 복제 리플리카 샤드는 각각 다른 노드에 위치하게 된다. 그렇다면 위에서 엘라스틱서치는 검색요청시 모든 샤드에 브로드캐스트 방식으로 검색요청을 보낸다 했는데, 원본 샤드와 복제 리플리카 샤드 두개 모두에게 검색 요청이 갈..
엘라스틱서치는 인덱스에 저장된 문서를 검색할 수 있도록 다양한 검색기능을 제공한다. 문서는 색인시 설정한 Analyzer에 의해 분석과정을 거쳐 토큰으로 분리되는데, 이러한 Analyzer는 색인 시점 말고도 검색 시점에도 이용된다. 특정 문장이 검색어로 요청되면 분석기를 통해 분석된 토큰의 일치 여부를 판단하여 그 결과에 Score을 매긴다. 이러한 엘라스틱서치에서는 다양한 검색 조건을 주기위하여 Query DSL이라는 특수한 쿼리 문법을 제공한다. 1. 검색 API 문장은 색인 시점에 텀으로 분리된다. 검색 시에는 이 텀을 일치시켜야 검색이 가능하다. 엘라스틱서치는 루씬기반이기 때문에 색인 시점에 Analyzer를 통해 분석된 텀을 Term, 출현빈도, 문서번화와 같이 역색인 구조로 만들어 내부적으로..
다른 모든것처럼 "얼마나 빠른가?"라는 질문에 대한 대답은 유스케이스, 하드웨어, 설정에 따라 달라진다. 유스케이스에 맞게 엘라스틱서치의 성능을 극대화할 수 있도록 설정하는 방법에 대해 알아보자. 언제나 성능 향상에는 상응하는 대가가 따른다. 따라서 먼저 무엇을 희생할지를 결정해야 한다. 애플리케이션 복잡도 - 어떻게 다수의 요청(색인, 갱신, 삭제, 조회, 검색 등의 요청)을 하나의 HTTP 요청으로 그룹화하는지에 대해 살펴본다. 이 그룹화는 때로는 애플리케이션에서 경계해야 할 때도 있지만, 전반적인 성능을 획기적으로 끌어올릴수 있는 방법이기도 하다. 네트워크 오버헤드가 더 적기 때문에 20~30배의 성능 향상을 기대할 수 있다.색인과 검색 중 어느 것의 성능에 초점을 맞출 것인가 - 엘라스틱서치가 루..
엘라스틱서치의 집계는 검색과 일치하는 문서를 적재하고, 문자 필드의 단어를 세거나, 숫자 필드의 평균을 구하는 것과 같은 계산 업무를 해결할 수 있다. 집계가 동작하는 걸 보기 위해, 예시를 확인한다. 사용자는 태그를 선택할 수 있고 선택된 태그에 포함되는 문서를 필터할 수 있다. 이것은 사용자가 자신의 관심 그룹을 쉽게 찾을 수 있도록 한다. 엘라스틱서치에서 인기있는 태그 목록을 얻으려면, 집계를 사용하면 된다. 이 경우에 텀즈 집계를 태그 필드에 사용하여 필드에서 단어의 발생을 계산하고 가장 많이 반복되는 단어를 돌려보내면 된다. facet은 무엇인가?루씬, 솔라 또는 엘라스틱서치를 써본 경험이 있다면, facets을 들어봤을 것이다. facets은 집계와 유사하다. 이것도 질의에 일치하는 문서를 적..