-
[Elasticsearch] 엘라스틱 서치 인덱스 생성Elasticsearch 2023. 4. 6. 15:38
인덱스를 생성하는 기본 쿼리
PUT /<인덱스명> { "settings": { "number_of_shards": <샤드 개수>, "number_of_replicas": <복제본 개수>, ... }, "mappings": { <매핑 설정> } }
Settings와 Mappings
- 모든 인덱스는 두 개의 정보 단위를 가지고 있는데 바로 settings와 mappings이다.
Mappings
데이터 타입
- 필드의 데이터 타입을 정의합니다. 데이터 타입에는 숫자, 문자열, 날짜 등이 있으며, 데이터의 형식과 크기에 따라 적절한 데이터 타입을 지정해야 합니다.
"properties": { "title": { "type": "text" }, "price": { "type": "integer" }, "created_at": { "type": "date", "format": "strict_date_optional_time||epoch_millis" }, "price": { "type": "double" } }
검색 가능 여부, 정렬 가능 여부 등 설정
- 필드의 검색 가능 여부, 정렬 가능 여부, 필드의 유일성 여부 등을 설정할 수 있습니다.
- 데이터의 검색 및 정렬 요구사항에 따라 필드의 설정을 적절하게 지정해야 합니다.
- 필드의 설정이 검색 결과와 정확성에 직접적인 영향을 미치므로, 데이터의 특성을 고려하여 필드의 속성을 설정해야 합니다.
중첩된 객체 및 배열 설정
- 문서 내에 중첩된 객체나 배열이 있는 경우, 해당 객체나 배열의 매핑을 정의해야 합니다.
- 중첩된 객체나 배열의 구조와 데이터 타입을 정확하게 지정하여 데이터의 검색과 분석이 원활하게 이루어질 수 있도록 해야 합니다.
"mappings": { "properties": { "author": { "properties": { "first_name": { "type": "text" }, "last_name": { "type": "text" } } }, "tags": { "type": "nested", "properties": { "name": { "type": "keyword" }, "score": { "type": "integer" } } } } }
동적 매핑 설정
- 엘라스틱 서치는 동적으로 매핑을 생성할 수 있는 기능을 제공합니다.
- 인덱스에 문서가 추가될 때, 자동으로 필드의 매핑을 생성하는 기능을 사용할 수 있습니다.
- 동적 매핑 설정을 통해 데이터의 다양성과 확장성을 고려할 수 있습니다.
"mappings": { "dynamic": "true", "properties": { "title": { "type": "text" }, "author": { "type": "keyword" } } }
필드 별칭 설정
- 필드 별칭은 검색 요청 시 필드의 별칭을 사용하여 더 간편하고 유연한 검색을 할 수 있게 해줍니다.
- 필드 별칭을 설정하여 필드의 이름을 추상화하고, 검색 요구사항의 변경에 대응할 수 있도록 해야 합니다.
"mappings": { "properties": { "title": { "type": "text" }, "author": { "type": "keyword" }, "pub_date": { "type": "alias", "path": "published_date" } } }
Settings
인덱스의 기본 설정
- 인덱스의 샤드 수와 복사본 수를 설정할 수 있습니다.
- 샤드는 인덱스의 데이터를 분산 저장하는 단위이며, 복사본은 데이터의 안정성을 보장하기 위해 사용됩니다.
- 사용자의 데이터 크기와 검색 요구사항에 맞게 적절한 값을 선택해야 합니다.
- shard는 분산해서 저장하기 때문에 replica 수보다 많게 설정하는 것이 좋으며, shard와 replica를 합한 수가 index 수가 될 수 있도록 설정하는 것을 권장합니다. (shard수+replica수=index수)
- replica는 많을수록 성능 이슈가 많이 발생하기 때문에 0 or 1 개를 사용할 것을 권장합니다.
PUT /index_name { "settings": { "number_of_shards": 3, "number_of_replicas": 2 } }
성능 및 저장 옵션 설정
- 인덱스의 성능과 저장 옵션을 설정할 수 있습니다.
- 인덱스의 메모리 할당량, 검색 요청 시간 제한, 데이터 복구 설정 등을 고려하여 적절한 값을 지정해야 합니다.
- 각 설정 옵션의 의미와 영향을 이해하고 설정하는 것이 중요합니다.
PUT /index_name/_settings { "index": { "refresh_interval": "30s", "max_result_window": 10000, "translog.flush_threshold_size": "512mb" } }
데이터 백업 및 복구 설정
- 인덱스의 데이터 백업과 복구 설정을 정의할 수 있습니다.
- 데이터의 안정성과 보존을 위해 정기적인 백업 설정과 데이터 손실 발생 시의 복구 방법을 고려해야 합니다.
- 백업과 복구에 사용될 스냅샷 및 리포지토리를 설정하는 것도 중요합니다.
PUT /_snapshot/my_repository { "type": "fs", "settings": { "location": "/mnt/backups/my_repository", "compress": true} }
Filter, Tokenizer, Analyzer
Elasticsearch에서 검색을 수행하려면, 검색어를 인덱싱할 때 사용된 텍스트를 정규화(normalization)해야합니다. 이를 위해 Elasticsearch는 filter, tokenizer, analyzer 등의 기능을 제공합니다.
Filter
Filter는 토큰 스트림에서 토큰을 처리하는 방법을 정의합니다. 주요한 filter 종류로는 소문자 변환(Lowercase), 불용어 제거(Stopwords) 및 동의어 처리(Synonyms)가 있습니다.
"filter": { "my_stopwords": { "type": "stop", "stopwords": [ "the", "a", "an" ] }, "my_synonyms": { "type": "synonym", "synonyms": [ "u.s, united states, usa", "search, query" ] } }
Tokenizer
Tokenizer는 텍스트를 토큰으로 분리하는 방법을 정의합니다. 일반적인 tokenizer 종류로는 Standard, Whitespace, Keyword 등이 있습니다.
"tokenizer": { "my_tokenizer": { "type": "standard", "max_token_length": 5 } }
Analyzer
"analyzer": { "my_analyzer": { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "my_stopwords", "my_synonyms" ] } }
// settings 예시 PUT /index_name { "settings": { "number_of_shards": 5, "number_of_replicas": 1, "analysis": { "analyzer": { "my_analyzer": { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "my_stopwords", "my_synonyms" ] } }, "filter": { "my_stopwords": { "type": "stop", "stopwords": [ "the", "a", "an" ] }, "my_synonyms": { "type": "synonym", "synonyms": [ "u.s, united states, usa", "search, query" ] } } } } }
엘라스틱 서치 가이드북
Elastic 가이드 북 - Elastic 가이드북
7. 인덱스 설정과 매핑 - Settings & Mappings
esbook.kimjmin.net
728x90'Elasticsearch' 카테고리의 다른 글
[Elasticsearch] 엘라스틱서치 데이터 수정(update) (0) 2023.04.18 [Elasticsearch] 엘라스틱 서치 데이터 삭제(delete) (0) 2023.04.17 [Elasticsearch] 엘라스틱 서치 데이터 검색(search) (0) 2023.04.10 [Elasticsearch] 엘라스틱 서치 데이터 색인 (0) 2023.04.07 [Elasticsearch] 엘라스틱 서치 형태소 분석기 (0) 2023.04.06