Elasticsearch reindex - 재색인
아직 생성되지 않은 인덱스에 매핑을 추가하고 도큐먼트를 추가하기도 해 봤고, author 필드가 없어서 필드를 추가하기도 해 봤어요. 그러면 기존의 필드 매핑 타입을 변경하는 건 어떻게 할까요? 결론부터 말하자면 안돼요. 필드에 "ignore_above"와 같이 몇몇 매핑 파라미터를 추가하거나 변경하는 건 가능하지만 대부분의 경우엔 매핑 타입을 변경할 수 없어요. 그럼 왜 기존 인덱스의 매핑 정보를 수정하는 게 안 되는 걸까요? 여러 가지 이유가 있겠지만 중요한 이유 중 하나는 매핑 정보가 변경되면 데이터가 저장되는 방식이 바뀌게 돼요. text형으로 인덱싱이 완료된 필드를 keyword타입으로 변경하면 어떻게 될지 생각해보세요. 인덱스에 매핑을 생성했는데 아직 도큐먼트를 추가하지는 않았어도 안돼요. 변..
Elasticsearch Mapping parameters
analyzer, coerce, 그리고 따로 시간을 내서 언급한 적은 없지만 properties, field, ignore_above. 이런 것들을 한데 묶어서 엘라스틱서치에서는 매핑 파라미터라고 불러요. https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html Mapping parameters | Elasticsearch Guide [7.14] | Elastic www.elastic.co 모두 한 번씩 다 확인할 수는 없지만 몇개만 확인해볼게요. format 포맷 파라메터는 date 타입의 필드에서 쓸 수 있어요. 그럼 그전에 date 타입에 대해서 먼저 좀 알아볼까요? 엘라스틱서치에서 date는 다음 세가지 ..
Elasticsearch Type Coercion - 데이터 타입 변환
데이터 타입 변환에 대해 알아보기 전에 먼저 이 거 한번 봐주세요. 다음 중 정수 5는? 1. "5" 2. 오 3. 5.0 4. 5 정답은 4입니다. 그럼 오답풀이를 해볼까요? 1번은 문자 5 2번도 그냥 문자 5 3번은 부동소수점 5.0 5.000001이나 5.0이나 5나 사실 그냥 5는 5인데... 자료형이 앞에 붙으면 int 5 랑 float 5.0은 느낌이 너무 다르네요. 엘라스틱서치는 데이터 타입을 정해진 규칙에 따라서 변환을 해줘요. 예를 들면, 정수형 데이터만 받기로 한 number_one이라는 필드에 문자열 값 "5"가 들어오면 이 건 사실 에러가 나야 하는 건데 엘라스틱서치에서는 coercion이라는 기능을 통해서 문자열 "5"를 정수로 바꿀 수 있는지 확인하고 바꿀 수 있다면 정수로 바..
no image
Elasticsearch keyword - 키워드
엘라스틱서치에서 데이터 타입: 키워드는 텍스트 타입과는 다르게 전문검색용으로 사용하지 못해요. 왜? 냐하면 키워드 타입은 텍스트 타입과 다르게 분석하고 저장하는 방식에서 차이가 나기 때문이에요. 텍스트 타입에는 standard analyzer가 사용되는 반면에 키워드 타입에는 keyword analyzer가 사용돼요. 예전에 한 번 써봤던 analyze API를 사용해서 한 번 볼게요. POST /_analyze { "text": "Harry Potter and the Deathly Hallows", "analyzer": "keyword" } { "tokens" : [ { "token" : "Harry Potter and the Deathly Hallows", "start_offset" : 0, "end..
no image
Elasticsearch Mapping & Data Type
엘라스틱서치의 분석(analysis)은 텍스트 필드만 대상으로 한다고 했어요. 그럼 누가 '이 필드는 텍스트 필드예요.', '이 필드는 숫자형 필드예요.'라고 알려주는 걸까요? 엘라스틱서치는 뭘 보고 어떤 필드가 어떤 데이터 형을 사용하는지 알 수 있을까요? 엘라스틱서치에서 사상(寫像) - Mapping 엘라스틱서치 공식문서에서는 매핑을 도큐먼트와 그 안에 있는 필드들이 엘라스틱서치 안에 어떻게 색인되고 저장되는지를 정의하는 작업이라고 설명하고 있어요. 매핑이란 우리말로 사상(寫像)이라고 하는데 수학에서든 컴싸에서든 둘 사이 어떤 관계를 만드는 것 혹은 연결하는 것을 사상 혹은 매핑이라고 해요. 그러니까 엘라스틱서치 애널리시스는 인덱스에 도큐먼트가 생성될 때 어떤 필드는 어떤 형식의 데이터이니 어떠한 구..
no image
Elasticsearch analysis - 텍스트 분석기
엘라스틱서치는 텍스트 분석을 통해 검색하기 쉬운 구조로 텍스트 값을 저장해요. 내가 인덱스를 처음 생성하고 텍스트 타입의 필드 값을 입력하면 엘라스틱서치 분석기는 이 필드 값을 분석하는데 엘라스틱서치에서 분석기는 무엇인지 알아봐요. 엘라스틱서치에서 도큐먼트를 하나 불러와 볼게요. 앞에서 만들었던 해리포터 불사조 기사단을 한 번 불러와볼까요? _source 필드 안에는 이 도큐먼트를 색인(indexing)할 때 입력했던 값 그대로 들어가 있는 것을 볼 수 있어요. 그런데 이 건 '입력할 때 이렇게 했어.'라고 엘라스틱서치가 우리에게 보여주는 것이고 엘라스틱서치에게 '죽음의 성물을 찾아줘'라고 하면 엘라스틱서치는 이 _source 필드의 값을 보고 우리가 원하는 것을 찾아주는 게 아니라 엘라스틱서치 안에서 ..
Elasticsearch 일괄 처리기
일괄 처리 작업, 배치 프로세스는 다량의 데이터를 한 번에 일괄적으로 처리하는 것을 말해요. 그럼 엘라스틱서치에서의 일괄 처리 작업, 배치 프로세스는 어떻게 될까요? https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html Bulk API | Elasticsearch Guide [7.14] | Elastic The final line of data must end with a newline character \n. Each newline character may be preceded by a carriage return \r. When sending NDJSON data to the _bulk endpoint, use a..
no image
Elasticsearch Scripted Update & Upsert
Elasticsearch C.R.U.D에서 책이 한 권 팔렸다고 가정하고 기존 in_stock 값에서 하나 뺀 값을 넣어서 업데이트를 해줬었는데 하나 빼는 건 암산으로 가능한데 10개 이상 빼면 암산이 쉽지 않을 것 같아요. 나는 몇 개가 팔렸는지만 이야기해주고 뺄셈은 콤퓨-타가 알아서 해주면 정말 좋을 텐데요. Elasticsearch는 위와 같은 기능을 Script라는 이름으로 제공하고 있어요. https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html Scripting | Elasticsearch Guide [7.14] | Elastic With scripting, you can evaluate cust..
no image
Elastic Stack과 C.R.U.D
어떤 선생님이 그러셨어요. C(Create). R(Read). U(Update). D(Delete)를 할 줄 알면 그 건 그 기술을 사용할 줄 아는 거라구요. 그런데 엘라스틱서치는 C.R.U.D 다 해도 반에 반도 사용하지 못하는 거 같아요. 그래도 못하는 것보다는 할 줄 알면 좋을 것 같으니까 해볼게요. 그전에 docker를 사용해서 Elasticsearch 하나랑 Kibana 하나씩 설치했는데 앞에서도 봤듯이 싱글-노드 클러스터는 뭔가 하다 만 것 같은 느낌이잖아요? Health가 Yellow에서 Green으로 또 바뀌는 것도 보고 싶구요. 그리고 지금 상태는 컨테이너가 삭제되면 안에 있는 데이터도 모두 그냥 날아가게 생겼어요. 그래서 먼저 Elasticsearch에 저장소도 붙여주고 노드도 3개 만..