
엘라스틱서치의 인덱스는 아주 세부적인 부분까지 설정으로 제어할 수 있다.
그 말인 즉슨, 설정에 따라 동작과 특성이 매우 달라지기 때문에 인덱스 설계가 중요하다 !
인덱스가 데이터를 몇 개의 샤드로 쪼갤 것인지 지정한다.
(기본값: 1)
한 번 지정하면 특별한 작업(ex: reindex 등 인덱스를 통째로 재색인)을 수행하지 않는 한 바꿀 수 없으니 주의한다.
너무 많으면...
너무 적으면...
주 샤드 하나당 복제본 샤드를 몇 개 둘 것인지 지정한다.
엘라스틱서치 클러스터에 몇 개의 노드를 붙일지, 어느 정도의 고가용성을 제공할 것인지를 고려해서 지정한다.
인덱스 생성 후에도 동적으로 변경이 가능하다.
엘라스틱서치가 해당 인덱스를 대상으로 refresh를 얼마나 자주 수행할지 지정한다. (얼마나 자주 검색 대상을 추가할 것인지)
(기본값: 1s)
-1로 지정하면 주기적인 refresh를 수행하지 않는다.
마지막으로 검색 쿼리가 들어온 시각을 확인하여 30초 이상 검색 쿼리가 들어오지 않는다면 다음 첫 검색 쿼리가 들어올 때까지 refresh하지 않는다. index.search.idle.after 설정을 변경하여 30초 대기 시간을 변경할 수 있다.
number_of_replicas, refresh_interval 같은 설정은 동적으로 변경할 수 있다.
request
PUT [인덱스 이름]/_settings
{
"index.number_of_replicas": 0,
"index.refresh_interval": "1s"
}
response
{
"acknowledged": true
}
설정 변경 요청이 성공하면 응답에 acknowledged 값으로 true를 받는다.
request
GET [인덱스 이름]/_settings
response
{
"my_index": {
"settings": {
"index": {
"creation_date": [timestamp],
"number_of_shards": "1",
"number_of_replicas": "1",
"uuid": [uuid],
"version": {
"created": "7080223"
},
"provided_name": "my_index",
"routing": {
"allocation": {
"include": {
"_tier_preference": "data_content"
}
}
}
}
}
}
}
자동으로 생성된 인덱스(ex: 인덱스가 없을 때 문서 색인을 요청한 경우)는 모든 주요 인덱스 설정이 기본값으로 지정된다. 실무 환경에서는 이런 방식의 운영은 적절하지 않으므로 인덱스 설정을 이해하고 직접 적절하게 지정해서 인덱스를 생성해야 한다.
request
PUT [인덱스 이름]
{
"settings": {
[인덱스 설정]
}
}
response
{
"acknowledged": true,
"shards_acknowledged": true,
"index": [인덱스 이름]
}