Elasticsearch
failed to obtain in-memory shard lock
문제 발생 샤드 할당에 대한 메모리 내 잠금(OpenSearch Service에 설정된 임계값 이내)을 얻지 못하면 다음과 같은 오류 메시지 해결 방법 노란색 클러스터 상태 문제 해결 클러스터가 노란색 상태로 전환되도록 하는 인덱스를 식별하려면 다음 쿼리를 사용 GET /_cat/indices?v&health=yellow 그런 다음 클러스터 할당되지 않은 샤드의 근본 원인을 확인하려면 다음 쿼리 사용 GET _cluster/allocation/explain 최대 재시도 설정 늘리기 클러스터를 녹색 상태로 되돌리려면 각 노란색 인덱스의 최대 재시도 횟수를 늘립니다. PUT //_settings { "index.allocation.max_retries": 10 }
Elasticsearch Dynamic Templates
Dynamic mapping 색인 필드의 데이터에 대한 data type을 지정하지 않고 동적으로 elasticsearch 에서 적절한 type을 지정해 주는 기능 mapping type을 미리 선언하지 않고 패턴이나 분석 특성에 맞춰 구성. match_mapping_type JSON 파서를 통해서 data type 을 detection 합니다. long, double 의 경우 integer 와 float 에 대한 정확한 detection 이 어렵기 때문에 항상 long 과 double 로 detection match_pattern 이 설정은 위에서 "match": "s_*" 과 같은 wildcard 패턴을 java 정규식으로 사용하기 위한 설정 [ ▼ 데이터 필드명의 prefix 값으로, 데이터 타입을..
Elasticsearch function_score 스코어 계산
검색 정확도 기준 BM25 알고리즘을 이용해 문서에 대한 score 계산 TF (Term Frequency) 문서 내에서 자주 등장하는 단어(Term) 에 가중치를 높게 부여, 문서내에서 같은 단어가 여러번 등장한다면 그 단어에 높은 가중치를 주는 알고리즘 IDF (Inverse Document Frequency) 많은 문서에서 등장하는 단어의 가중치는 낮추고, 일부 문서에만 등장하는 단어에 대해 높은 가중치 부여 전체 문서에서 발생한 term 빈도수가 작을수록 weight가 높다. 문서에 자주 등장하는 단어일수록 낮은 가중치를 주는 알고리즘 똑같이 1번 검색이 되었다 하더라도 문서에 자주 등장한 단어가 매칭된 키워드일수록 낮은 가중치 문서에 많이 나오는게 좋은게 아닌가? 라고 생각할 수 있겠지만 문서에..
index illegal_argument_exception
Elasticsearch 에서 Index 삭제 시, Wildcard 로 요청하면, --> Wildcard expressions or all indices are not allowed 에러가 발생하면서 삭제가 안됨. DELETE /indexName* { "error" : { "root_cause" : [ { "type" : "illegal_argument_exception", "reason" : "Wildcard expressions or all indices are not allowed" } ], "type" : "illegal_argument_exception", "reason" : "Wildcard expressions or all indices are not allowed" }, "status" :..
Document 데이터 전체 수정
# 게시판 카테고리 값이 없는 데이터 일괄로 "기타"값으로 수정 POST /board-202205/_update_by_query { "script": { "source": "ctx._source.category='기타'", "lang": "painless" }, "query": { "bool": { "must_not": [ {"exists": {"field": "category"}} ] } } }
조건에 따른 특정 Document 데이터 수정
# 1343번 게시글 카테고리를 "etc"로 수정 POST /board-202205/_update/1343 { "doc": { "category": "etc" } }
조건에 따른 특정 Document 데이터 삭제
# 1341번 게시글 삭제POST /board-202205/_delete_by_query{ "query": { "match": { "_id": "1341" } }}# writer 필드가 없는 게시글 일괄 삭제POST /board-202205/_delete_by_query{ "query": { "bool": { "must_not": { "exists": { "field": "writer" } } } }}
[Elasticsearch] monitoring execution failed 오류
Elasticsearch 로그 모니터링 중, 아래와 같은 오류가 발생했다. [2020-03-19T00:00:17,340][WARN ][o.e.x.m.MonitoringService] [xx-xx-log-1] monitoring execution failed org.elasticsearch.xpack.monitoring.exporter.ExportException: Exception when closing export bulk at org.elasticsearch.xpack.monitoring.exporter.ExportBulk$1$1.(ExportBulk.java:95) ~[?:?] at org.elasticsearch.xpack.monitoring.exporter.ExportBulk$1.onFailur..
Elasticsearch Cluster 재기동, Rolling restart
2EA 이상 Cluster로 구성된 Elasticsearch 서버를 재기동 해야할 때, 하나의 Elasticsearch를 서비스 종료 시, 데이터 Node들이 relocate 되서, 많은 리소스가 소모 된다. 빠르게 재기동 하기 위해서는 이 relocate 옵션을 끄고 진행한다. shard allocation 옵션을 disable $ curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d' { "transient" : { "cluster.routing.allocation.enable" : "none" } } ' 노드 shutdown $ curl -XPOST 'localhost:9200/_clus..
Kibana Mapping Conflict 해결 방법
kibana mapping conflict 현상 발생 시 우선적으로 해결해야 할 두가지 문제 1. index의 기존 데이터 매핑을 수정 2. 새로 만들어지거나, 새로 만들어질 index가 정확한 매핑이 가능하게 수정 but... Elasticsearch 에서는 이미 인덱싱된 기존 데이터는 매핑을 변경할 수 없다. 기존 데이터를 수정하려면, 새 인덱스를 생성하고 기존데이터를 복사해야 한다 (재 색인화: reindex) Template Mapping curl -XPUT 'localhost:9200/_template/access?pretty' -H 'Content-Type: application/json' -d' { "index_patterns": [ "access-*" ], "settings": { "num..