분류 전체보기
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 }
게임 마케팅 용어 정리
[유저관련 지표] UV Unique visitor 게임의 접속한 실제 유저 수, 여러번 방문해도 1로 카운트 DAU Daily Active User 일단위로 측정한 UV WAU Week Active User 주단위로 측정한 UV MAU Monthly Active User 월 단위로 UV 측정 RU Registered User 일정기간내에 게임에 등록된 유저 수 NRU New Registered User 일정기간내에 등록된 신규 유저 수 ARU Accumulate Register User 해당 기간까지의 등록된 누적 유저 수 MUV Multigame Unique Visitor 해당 기간 동안 게임 로그인하여 실제 게임을 플레이 한 회원 수 MTS Mutigame Time Spent 해당 기간 동안의 평균 ..
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" } } } }}
몽고디비 컬렉션 전체 삭제하기
시스템 관련 컬렉션을 제외한 전체 컬렉션 삭제하기 var dbs = db.getMongo().getDBNames(); for(var i in dbs){ db = db.getMongo().getDB( dbs[i] ); if (db.getName() !== 'admin' && db.getName() !== 'local'){ print( "dropping db " + db.getName() ); db.dropDatabase(); } }
nodejs ejs render 대신 html 사용하기
- app.js // 화면 engine을 ejs로 설정 app.set('view engine', 'ejs'); app.engine('html', require('ejs').renderFile); - index.js const express = require('express'); const router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { return res.render('index.html'); }); module.exports = router;