[ElasticSearch] 검색어 추천 기능(search_as_you_type)
Back-End/ElasticSearch2025. 6. 2. 08:43[ElasticSearch] 검색어 추천 기능(search_as_you_type)

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.쿠팡 서비스에 들어가서 검색 창에 글자를 입력하면 글자에 해당하는 검색어를 추천해준다.자동 완성 기능을 구현하는 방법에는 정말 다양한 방법이 존재한다.그 중에서 가성비가 좋은 방법인 search_as_you_type을 활용하는 내용을 다룬다. search_as_you_typeElasticsearch에서 자동 완성 기능을 쉽게 구현할 수 있게 설계된 데이터 타입이다.text 타입처럼 애널라이저(Analyzer)를 거쳐 토큰으로 분리된다.이 타입을 활용해 필드를 만들면 내부적으로 _2gram, _3gram이라는 멀티 필드(Multi Field)도 같이 만든다. _2gram, _3gramPUT /products{ "m..

[ElasticSearch] 멀티 필드(Multi Field)
Back-End/ElasticSearch2025. 6. 2. 00:09[ElasticSearch] 멀티 필드(Multi Field)

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.Multi Field하나의 필드에 text와 keyword 타입을 동시에 사용하고 싶을 때 사용데이터 타입에서 text는 유연한 검색이 필요할 때 사용하고, keyword는 정확한 검색이 필요할 때 사용한다.그런데 유연한 검색과 정확한 검색 둘 다 하고 싶은 경우가 있을 수 있다.예를 들어, 상품 카테고리와 이름 필드에 저장된 필드 값에 대해 검색할 때는 유연하게 검색되게 하고 싶고, 정확한 비교를 통해 특정 카테고리를 기준으로 필터링을 하고 싶을 수 있다.즉, text 타입과 keyword 타입을 동시에 사용하고 싶은 경우이다. 인덱스 생성PUT /products{ "mappings": { "propert..

[ElasticSearch] 오타 허용 검색, 하이라이팅, 페이지네이션 및 정렬
Back-End/ElasticSearch2025. 6. 1. 15:21[ElasticSearch] 오타 허용 검색, 하이라이팅, 페이지네이션 및 정렬

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.fuzziness(오타 허용 검색)오타를 어느 정도 허용해서 검색하고 싶을 때 fuzziness를 활용하면 된다. 인덱스 생성 및 데이터 삽입// 인덱스 생성PUT /boards{ "mappings": { "properties": { "title": { "type": "text" } } }}// 데이터 삽입POST /boards/_doc{ "title": "elasticsearch 사용법" } 오타 허용 검색GET /boards/_search{ "query": { "match": { "title": { "query": "elastiksearc..

[ElasticSearch] match, term, bool
Back-End/ElasticSearch2025. 6. 1. 01:49[ElasticSearch] match, term, bool

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.matchmatch검색어가 포함된 유연한 데이터를 조회하고 싶을 때match 쿼리는 검색 키워드가 포함된 모든 도큐먼트를 조회한다.match 쿼리는 text 타입의 필드에서만 사용하는 쿼리이다.keyword를 포함한 long, integer와 같은 타입의 필드에서는 사용하지 않는다.text 타입의 필드는 match 쿼리를 활용해 검색을 자주 하는 편이다. 하지만 text 타입이 아닌 필드에서는 match 쿼리를 활용하면 안 된다. text를 제외한 모든 타입에선 term을 써야 한다. 인덱스 생성 및 매핑 정의PUT /boards{ "mappings": { "properties": { "title"..

[ElasticSearch] 한글 검색 최적화(Nori Analyzer)
Back-End/ElasticSearch2025. 6. 1. 00:39[ElasticSearch] 한글 검색 최적화(Nori Analyzer)

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.스탠다드 애널라이저는 영어에 최적화된 유연한 검색 기능을 제공하지만, 한글에 적합하지는 않다.따라서 한글에 맞는 애널라이저인 Nori Analyzer를 써야 한다. 노리 애널라이저가 설치된 도커 컨테이너DockerfileFROM docker.elastic.co/elasticsearch/elasticsearch:8.17.4 # Nori Analyzer 플러그인 설치RUN bin/elasticsearch-plugin install analysis-nori compose.ymlservices: elastic: build: context: . dockerfile: Dockerfile po..

[ElasticSearch] 데이터 타입(data type)과 매핑(mapping)
Back-End/ElasticSearch2025. 5. 31. 16:43[ElasticSearch] 데이터 타입(data type)과 매핑(mapping)

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.데이터 타입Elasticsearch에서 데이터 타입의 종류는 아주 많다.그 중 이 글은 자주 사용하는 데이터 타입에 대해서만 정리한다. 숫자integer : 10억 이하의 정수만 저장하면 되는 경우long : 10억이 넘어가는 정수를 저장해야 될 수도 있는 경우double : 실수(소숫점을 가진 숫자 포함)를 저장해야 될 수도 있는 경우 문자text- 문자열을 토큰으로 쪼개서 저장하고 싶은 경우- 유연한 검색이 필요할 때 (완전히 일치하지 않아도 비슷한 데이터를 조회해오는 방식)keyword- 정확한 검색이 필요할 때 (정확하게 일치할 때만 데이터를 조회해오는 방식)- ex) 휴대폰 번호(010-1234-5678)..

[ElasticSearch] 애널라이저(Analyzer)
Back-End/ElasticSearch2025. 5. 31. 02:08[ElasticSearch] 애널라이저(Analyzer)

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.애널라이저(Analyzer)이론역인덱스(Inverted Index)로 저장하는 과정에서 문자열(text)을 토큰으로 변환시켜주는 장치를 보고 애널라이저(Analyzer)라고 부른다. 애널라이저(Analyzer)는 내부적으로 캐릭터 필터(character filter), 토크나이저(tokenizer), 토큰 필터(token filter)라는 걸 활용해 문자열을 토큰으로 변환시킨다. standard analyzerElasticsearch에서 제공하는 애널라이저로는 standard, simple, whitespace 등 다양한 종류가 있다.그 중 기본값으로 설정되어 있는 애널라이저는 standard analyzer이다...

[ElasticSearch] 역인덱스(Inverted Index)
Back-End/ElasticSearch2025. 5. 31. 00:45[ElasticSearch] 역인덱스(Inverted Index)

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.유연한 검색 기능RDBMS의 검색 한계MySQL의 products 테이블의 name 컬럼에 맥북 에어 13 M4라고 저장해놓고, 특정 키워드로 데이터를 검색하려면 아래와 같이 SQL문을 작성해야한다. SELECT * FROM products WHERE name = “%맥북 에어 13%”; 만약 MySQL에서 맥북 13 에어라고 검색하면 데이터가 검색되지 않는다. SELECT * FROM products WHERE name = “%맥북 13 에어%”; 하지만 실제로 우리가 쿠팡 등에서 물건을 검색할 때 단어의 순서를 정확하게 기억하고 검색하진 않는다. 위 제품을 쿠팡에 검색해서 구매하고 싶다고 할 때, 우린 쿠팡에 ..

image