본문 바로가기

728x90
728x90

elasticsearch

[Elasticsearch] Elasticsearch Highlight를 활용한 필드 매칭 이해하기 - 컴도리돌이(feat. java) - 컴도리돌이 Elasticsearch를 사용하다 보면, 하나의 키워드를 여러 필드에 매칭하여 검색해야 하는 경우가 있습니다. 보통 fields를 사용하여 여러 필드를 배열에 넣고, query 값에 검색어를 입력해 조회하곤 하죠. 예를 들어 아래와 같은 쿼리를 사용해 보신 적 있을 겁니다:{ "query": { "bool": { "must": [ { "multi_match": { "query": "경기도 성남시 분당구", "fields": ["addr", "jibun", "road"] } } ] } }} 이 쿼리는 지정된 필드들 중에서 키워드와 매칭되는 데이터를 찾아줍니다. 그런데 여기서 궁.. 더보기
[Elasticsearch] 성능 향상을 위한 doc_values 사용법: 메모리 효율 향상시키기 - 컴도리돌이 작심삼주 오블완 챌린지오늘 블로그 완료! 21일 동안 매일 블로그에 글 쓰고 글력을 키워보세요.www.tistory.comElasticsearch에서 성능을 최적화하는 것은 데이터 양이 많을수록 더욱 중요합니다. 보통 검색 속도에 집중하게 되지만, 메모리 사용 최적화 역시 시스템 성능에 큰 영향을 미쳐요. 이때 doc_values라는 기능이 등장하죠! 이 기능을 통해 메모리 사용을 절감하면서도 빠른 응답 속도를 확보할 수 있습니다. 😊근데 doc_values가 뭔데? 🤔doc_values는 필드 데이터를 메모리가 아닌 디스크에 저장하여 필요한 순간에만 참조할 수 있게 해주는 Elasticsearch의 기능입니다. 메모리 대신 디스크를 활용해 대량의 데이터를 효율적으로 다루게 하죠. 이를 통해 JVM 힙 .. 더보기
[Elasticsearch] 성능 개선을 위한 코드 비교 및 분석 - 컴도리돌이 작심삼주 오블완 챌린지오늘 블로그 완료! 21일 동안 매일 블로그에 글 쓰고 글력을 키워보세요.www.tistory.comElasticsearch로 데이터 검색 속도를 높이는 일은 단순히 쿼리 작성만의 문제가 아니었어요. 때로는 작은 설정 하나하나 코드 스타일이 성능 차이를 만들기도 합니다.불필요한 필드 설정 피하기먼저, 많은 분들이 텍스트 데이터를 다룰 때 대부분의 필드를 text로 지정하는 실수를 합니다. 🤔 텍스트 필드가 많으면 리소스를 불필요하게 잡아먹습니다. 아래처럼 너무 많은 필드를 text로 설정하면 검색 속도가 느려질 수밖에 없어요. // 잘못된 인덱스 설정 예시 { "mappings": { "properties": { "title": { "type": "text" }, "content":.. 더보기
[Elasticsearch] wildcard 쿼리에 대해 제대로 이해하기 - 컴도리돌이 RDBMS를 사용하다가 Elasticsearch에서 쿼리를 작성하면서 wildcard를 사용한 쿼리의 결과가 제가 생각했던 것과 달라서, 해당 내용에 대해 충분히 이해하기 위해 글을 작성하려고 합니다. Wildcard query를 작성하면서 예상했던 결과는 RDBMS의 LIKE에서 사용했던 '%searchInput%'와 같은 형태가 가능할 것으로 기대했는데, 막상 확인되는 결과는 그렇지 않았습니다. 원본 텍스트는 "경기도 용인시 기흥구 중동 1100번지"와 같은 형태의 주소입니다. 제가 시도한 쿼리는 다음과 같았습니다.{ "query": { "bool": { "must": [ { "wildcard": { "address": { "value": "*경기도 기흥구*" } } } ] } } } 그런데 결과는 .. 더보기
[Spring] Elasticsearch에서 스크립팅 언어로 조건 필터링 구현하기(feat. Java) - 컴도리돌이 Elasticsearch에서 데이터 조회 시 특정 조건에 따라 필드 값을 조정하고, 오늘 날짜와 비교해 필터링하는 작업은 종종 필요한 기능입니다. 단순한 필터링 쿼리만으로는 표현하기 어렵거나 우아하지 못한 경우가 많은데요, 저 역시 필드 값의 유효성을 확인하고 이를 기준으로 조건을 처리하면서 우아하지 않은 쿼리식 때문에 고생했죠. 😅그러다 마침내 스크립팅 언어인 Painless를 사용해 원하는 조건을 충족할 수 있었습니다. 이번 포스팅에서는 스크립트 사용법과 함께 이러한 과정을 공유해 보겠습니다.Painless 스크립트 예제Elasticsearch에서 다양한 스크립트 옵션을 사용하는 예제를 살펴보겠습니다. inline, params, lang과 같은 다양한 옵션을 포함해 작성한 예제입니다. 특히, Pa.. 더보기
[Spring] Elasticsearch에서 다중 정렬하기 (feat. java, query DSL) - 컴도리돌이 Elasticsearch를 도입하면서 기존에 사용했던 데이터 조회를 Elasticsearch Query DSL 방식으로 변경하고자 하니, 생각 외로 어려움이 많았습니다. 🙄 그중에서 알고 나서는 쉽지만, 처음에는 어떻게 하는지 막막했던 정렬 부분을 다뤄보려고 해요. 😊Elasticsearch Query DSL을 통한 다중 정렬일단 Query DSL에서 sort 배열을 사용하여 여러 필드를 지정하여 정렬할 수 있어요. 아래는 기본적인 예시입니다.{ "query": { "match_all": {} }, "sort": [ { "field1.keyword": { "order": "asc" } }, { "field2": { "order": "desc" } } ]} 위 예제에서 field.. 더보기
[Docker] 도커로 ELK8버전 사용하기 - 컴도리돌이 이번에 회사에서 ELK를 도입을 본격적으로 시작하였습니다. 🥺 하지만 올해 초부터 책도 선물 받고 잠깐 열심히 공부했지만, 역시 저란 인간은,, 나태 그 자체였습니다. 그래서 뭐 좀 알고 사용해야 하기 때문에 일단 ELK를 설치하려고 하는데 생각보다 쉽지 않았습니다... ChatGpt는 저를 과대평가하는지 너무 두리뭉실하게 설명해 주는데 저란 인간은 그 문장 하나하나가 너무 힘들었어요. 😓 그래서 후딱후딱 설치하고 실행시켜서 제 프로젝트에 어떻게든 사용법을 터득하려고 합니다.  일단은 저는 도커에서 elk 8 버전을 사용하려고 합니다. elastic.co에서 Elasticsearch랑 kibana, logstash를 설치해서 사용해도 되지만, 계속할 때마다 에러가 발생해서 저는 다음 git에서 조금 .. 더보기
[ELK] 인덱스(생성/조회/삭제)와 도큐먼트(CRUD)에 대해서 - 컴도리돌이 Elasticsearch 인덱스는 일반적인 관계형 데이터베이스와 성격이 다릅니다. 인덱스는 도큐먼트를 저장하는 논리적 구분자이며, 도큐먼트는 실제 데이터를 저장하는 단위입니다. 도큐먼트는 엘라스틱서치에서 데이터가 저장되는 기본 단위로 JSON 형태이며, 하나의 도큐먼트는 여러 필드와 값을 갖고 있습니다. 이번 포스팅에서는 엘라스틱 서치가 도큐먼트에 데이터를 어떻게 저장하는지 알아볼려고 합니다. 인덱스(index) 인덱스는 도큐먼트를 저장하는 논리적 단위로, 관계형 데이터 베이스의 테이블과 유사한 개념입니다. 하나의 인덱스에 다수의 도큐먼트가 포함되는 구조이며, 동일한 인덱스에 있는 도큐먼트는 동일한 스키마를 가질 수 있습니다. 그리고 모든 도큐먼트는 반드시 하나의 인덱스에 포함돼야 합니다. 인덱스 이름에.. 더보기