검색 엔진 Search

    Reindex, Alias 활용해 문서 재색인하기 (비동기, 무중단)

    Elasticsearch Reindexing은 데이터의 이동, 수정, 또는 클러스터 업데이트 시 중요한 역할을 하는 프로세스입니다. 데이터의 성능 향상, 새로운 매핑의 적용, 또는 클러스터 확장을 위해 필요한 작업으로, Elasticsearch의 핵심 기능 중 하나로 꼽힙니다. Reindexing은 주로 데이터 업데이트를 위해 사용됩니다. 기존 데이터 스키마를 새로운 구조로 변경하거나 업데이트해야 할 필요가 있을 때 사용합니다. 새로운 필드의 추가나 기존 필드의 삭제 등의 매핑 변경을 수행할 수 있습니다. 본 글에서는 Reindexing이 어떻게 작동하는지, 그리고 어떻게 효율적으로 사용할 수 있는지, 무중단으로 새로운 인덱스를 적용할 수 있을지 살펴보겠습니다. Elasticsearch 시리즈는 7.1x..

    Elasticsearch 문서 업데이트 (document update)

    이미 인덱싱되어 있는 문서의 데이터를 변경할 경우에는 Update 요청을 사용합니다. Update 요청으로 어떻게 지정된 스크립트를 사용하여 문서를 업데이트하는지 예제와 함께 주의할 점도 알아봅시다! Update Request 는 다음과 같이 보낼 수 있습니다. POST //_update/ Update 실행 시 문서의 버전이 증가합니다. 스크립트와 함께 문서 업데이트가 가능한데, 이때 스크립트는 문서를 업데이트하거나 삭제하거나 수정을 건너뛸 수도 있습니다. 문서 일부분만 전달하여 기존 문서와 병합할 수도 있습니다. 굳이 전체 문서 내용을 전달할 필요가 없어 기본 인덱싱 파이프라인과 다르게 수행되어야 하는 등 다른 파이프라인으로 업데이트 되는 내용에 대하여 부분 업데이트가 가능합니다. 인덱스에서 문서를 가..

    [Basic] Elasticsearch 문서 인덱싱 - Index, Delete, Update, Bulk

    이번 글에서는 지난 글에서 직접 구축했던 인덱스에 도큐먼트를 인덱싱하고, 삭제하고, 업데이트 하는 방법을 알아보고자 합니다. 지난 글을 읽지 않았어도, 인덱스 생성에 관해 매핑, 분석, 설정 등 기본적인 지식을 알고 있다면, 본 글을 쉽게 이해하실 수 있습니다! Elasticsearch 시리즈는 7.10 버전을 기본으로 설명합니다. 필요하다면 8.0 이후의 버전 내용을 추가로 설명합니다. 도큐먼트를 인덱싱 할 대상 인덱스는 다음과 같이 정의하였습니다. PUT /sample-user-index { "mappings": { "properties": { "age": { "type": "integer", }, "level": { "type": "keyword" }, "name": { "type": "text",..

    [Basic] Elasticsearch 간단한 인덱스 구성하기 실습 - Mapping, Analysis, Similarity, Setting

    지난 글들에서 간단하게 살펴본 내용을 바탕으로 오늘은 직접 샘플 인덱스를 구축해보려고 합니다. 간단한 필드 구성을 가진 인덱스를 생성하면서, 언급했던 일부 인덱스 모듈 내용을 추가해봅시다. Elasticsearch 시리즈는 7.10 버전을 기본으로 설명합니다. 필요하다면 8.0 이후의 버전 내용을 추가로 설명합니다. Mapping 유저에 관련된 필드 "age", "level", "name"를 가진 "sample-user-index"를 생성합니다. 각각의 필드에 대해 유형을 정의할 수 있습니다. integer 유형은 말 그대로 32비트 정수를 의미합니다. keyword 와 text 유형은 둘다 텍스트에 관한 유형이지만, 전자는 term level search, 후자는 full-text search를 지원한..

    [Basic] Elasticsearch 인덱스(Index) 구성하기 (2)

    오늘은 지난 글에 이어서, 인덱스를 구성하기 위한 요소들에 대해 알아봅시다. 지난 글에서는 인덱스 샤드 수, 레플리카 수 등 일반적인 설정을 정의할 수 있는 Settings와 각 필드의 속성과 전체적인 스키마를 정의하는 Mappings에 관해 알아봤습니다. 오늘은 나머지 2가지, 문자열 필드의 분석기 등을 설정하는 Analysis와 검색 시의 유사도를 정의하는 Similarity에 대해 추가로 알아보겠습니다. Elasticsearch 시리즈는 7.10 버전을 기본으로 설명합니다. 필요하다면 8.0 이후의 버전 내용을 추가로 설명합니다. 분석(Analysis) 인덱스 분석 모듈은 문자열 필드를 개별 용어(term)로 변환하는 데 사용할 수 있는 분석기를 구성하도록 하는 레지스트리 역할을 합니다. 텍스트 분..

    [Basic] Elasticsearch 인덱스(Index) 구성하기 (1)

    검색 엔진을 구축하기 위해서 가장 먼저 필요한 것은 무엇일까요? 검색 대상이 되는 도큐먼트(Document)가 들어갈 수 있는 DB 같은 공간을 만들어야겠죠? 이번 글의 목표는 도큐먼트의 집합인 인덱스(Index)를 구성하는 요소를 이해하고, 예제를 통해 직접 인덱스를 정의하면서 ES에서 사용하는 기본적인 CRUD 방식에 익숙해지는 것 입니다. Elasticsearch 시리즈는 7.10 버전을 기본으로 설명합니다. 필요하다면 8.0 이후의 버전 내용을 추가로 설명합니다. 인덱스 구성 요소 인덱스 모듈은 인덱스별로 생성되는 모듈로 인덱스와 관련된 모든 측면을 제어합니다. 일반적으로 인덱스를 정의할 때 사용되는 세부 모듈은 간략하게 다음과 같습니다. - 인덱스 샤드 수, 레플리카 수 등 일반적인 설정을 정의..

    [Basic] Elasticsearch에 대해 알아봅시다!

    엘라스틱서치(Elasticsearch, ES) 검색엔진에 대해 차근차근 알아가는 시리즈 글을 써볼 예정입니다. 해당 시리즈는 ES의 색인과 검색, 형태소 분석기 등 기본적인 기능 또는 검색엔진 구축 과정에서의 이슈 해결을 주제로 이어질 예정입니다. 오늘은 그 첫 번째로 Elasticsearch의 기본 개념에 대해 전반적으로 살펴봅시다! Elasticsearch 란? You know, for search (and analysis) 당연히 검색(그리고 분석)을 위한 엔진입니다! ES는 엘라스틱 스택(Elastic Stack)의 핵심인 분산 검색 및 분석 엔진입니다. Elastic Stack 중 로그스태시(Logstash)와 비츠(Beats)는 데이터 수집, 집계, 보강을 용이하게 하여 ES에 저장할 수 있게..