본문 바로가기

728x90
728x90

elasticsearch

[Logstash] Logstash를 활용한 PostgreSQL 데이터 Elasticsearch에 Bulk Insert 작업 설정 - 컴도리돌이 운영 환경에서 PostgreSQL 데이터를 Elasticsearch로 전송하는 과정에서 Bulk Insert 작업이 어떻게 이루어지는지 궁금할 때가 있습니다. 데이터는 정상적으로 조회되지만 정작 인스턴스 내부에서는 명확한 실행 스크립트나 배치 파일이 보이지 않더라고요.🤔이러한 경우, 데이터가 어떤 방식으로 처리되는지 파악하는 것이 중요하기 때문에 이번 기회에 로그스태시에서 기존 DB에 있는 데이터를 Elasticsearch에 대량 추가하는 방법을 알아보려고 합니다.  우선, /etc/logstach/conf.d/ 디렉터리를 확인하는 것이 가장 먼저 해야 할 일입니다. 로그스태시는 데이터를 수집하고 변환한 후 Elasticsearch로 전달하는 역할을 합니다. 이 디렉터리 내 .conf 파일을 살펴보면,.. 더보기
[Elasticsearch] Elasticsearch를 활용한 특정 행정구역 내 데이터 집계하기 (feat. java) - 컴도리돌이 [PostgreSQL] PostGIS 설치 및 사용 - 컴도리돌이주어진 좌표가 어떤 행정구역에 포함되는지 알아야 하는 상황이 생겼습니다. 여러 방법이 있지만 그중에서 PostgreSQL에 있는 확장 라이브러리인 PostGIS가 속도 및 정확성에 성능이 매우 뛰어난다comdolidol-i.tistory.com [PostgreSQL] PostGIS 성능 비교: GEOMETRY vs TEXT 저장 방식, 얼마나 차이 날까? - 컴도리돌이회사에서 PostGIS 도입을 고민하면서, 어떤 이슈가 발생할지 모르기 때문에 행정구역 경계 값을 TEXT로 처리하여 JSON 형태로 변환 후 Elasticsearch의 geo-bounding box query로 조회하는 방안을 계획했습니다comdolidol-i.tistory... 더보기
[PostgreSQL] PostGIS 성능 비교: GEOMETRY vs TEXT 저장 방식, 얼마나 차이 날까? - 컴도리돌이 회사에서 PostGIS 도입을 고민하면서, 어떤 이슈가 발생할지 모르기 때문에 행정구역 경계 값을 TEXT로 처리하여 JSON 형태로 변환 후 Elasticsearch의 geo-bounding box query로 조회하는 방안을 계획했습니다. 하지만 elasticsearch도 가기 전에, 행정구역 경계 값을 TEXT로 저장하니 간단한 SELECT 문임에도 불구하고 조회 시간이 무려 11초가 걸렸습니다. 전체 데이터 개수가 5,300개 정도밖에 안 되는데도 말이죠. 게다가 테스트 환경이 AWS RDS에서 나쁘지 않은 등급이었음에도 불구하고 이 정도로 속도가 안 나올 줄은 상상도 하지 못했어요. 하긴 저장된 text 경계 값이 평균 2 ~ 3.5 MB 정도 되더라고요 😂PostGIS vs TEXT: 테이블.. 더보기
[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.. 더보기