반응형
전체 글

전체 글

    elasticsearch 몇가지 간단 정리

    엘라시틱 서치 간단정리 ※score 계산 알고리즘- tf-idf와 bm25 사용 (엘라스틱 서치 5.0 부터는 bm25로 사용한다고 한다.) https://www.popit.kr/bm25-elasticsearch-5-0%EC%97%90%EC%84%9C-%EA%B2%80%EC%83%89%ED%95%98%EB%8A%94-%EC%83%88%EB%A1%9C%EC%9A%B4-%EB%B0%A9%EB%B2%95/ ※최소 만족해야하는 score 지정 min_score검색된 데이터중에서 score가 6이상인 문서만 추출 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-min-score.html123456789101112GET /..

    elasticsearch session timeout 이슈

    node.js에서 엘라스틱서치 클라이언트 사용시에 반복되는 요청이나 오랜 시간이 필요한 요청이 있을때 session이 끊어져 버리고 socket hang up 이슈가 발생한다. ※해결방법 session timeout과 keepalive 옵션을 지정해주면 된다. 아래 내용을 보고 참고하여 설정하시길.

    Elasticsearch 한글 형태소 설치 및 사용

    Elasticsearch 검색시에 한글 형태소를 사용하지 않으면 term을 단순하게 공백을 이용해서 쪼갠다. 하지만 한글말에는 조사도 구분해야하고 품사도 구분해서 사용해야 정확한 검색을 지원할 수 있다. 한글 형태소 플러그인은 크게 arirang, seunjeon, open korea text가 존재한다. 3개의 성능 비교와 자세한 설명은 엘라스틱 서치 블로그에서 참고하면 된다.https://www.elastic.co/kr/blog/using-korean-analyzers open korea text 설치3가지 플러그인중에 open korea text를 사용해서 기능을 테스트해보자. 우선 docker를 사용중이므로 elasticsearch 내부 bash shell로 접속한 후 elasticsearch-p..

    elasticsearch multi type 기능 제거 이슈

    elasticsearch는 인덱스 하나의 여러 type을 제공했다. 예를 들면 twitter라는 인덱스에 user와 tweet 두개의 타입을 가질 수도 있고 그 안에 Document들이 저장된다. 각각의 타입에 들어있는 properties에는 서로 다른 타입의 것과 독립적으로 보이기 때문에 각 타입에 같은 이름의 properties를 사용할 수 있다. 예를 들면 user type 필드에도 user_name을 만들고, tweet 필드에도 user_name을 만들 수있다. 그리고 각 type에 들어있는 document에는 _id 속성이 있는데 이는 각 타입별로 만들어지기 때문에 서로 다른 타입에 _id는 같은 값을 가질 수도 있다. 위의 내용까지는 얼추 알던내용인데 왜 7.0부터는 이 편한 multi typ..

    node.js 애플리케이션 프로세스 관리 도구 매니저

    PM2는 built-in 되어있는 Load Balancer와 함께 node.js 애플리케이션의 runtime and process 관리 기능을 제공해 주는 라이브러리이다. PM2를 이용하여 application이 죽지 않고 돌아갈 수있게 watch 기능을 제공해주는 기능도 제공한다. 그리고 error.log, info.log, 자원 점유 등등 여러 기능을 제공해준다. 간단하게 설치부터 사용법에 대해 정리해보자. 설치 $ npm install pm2 -g 실행방법 $ pm2 start app.js 사용법은 아주 간단하다. 위와 같이 command로 프로그램을 실행할 때 여러 옵션도 줄 수 있다. 12// wedul_app.js 를 max_space_size를 500으로 지정하고 실행하라.pm2 start ..

    간단한 카카오 챗봇 만들기

    node.js 공부한 것으로 한번 테스트 해보기 위해서 카카오 플러스친구를 만들고 그곳에서 호출하는 api를 만들어 연동해봤다. 일부러 wedul 플러스 친구 정보와 친구추가를한 사용자들에 정보를 담을 데이터는 redis에 넣어봤다. 플러스친구 만들기우선 카카오 플러스친구에 들어가서 플러스친구를 만들었다. 플러스 친구에 wedul이라고 검색하면 이제 나온다. 신기하다.친구 추가 url : http://pf.kakao.com/_qMxnEj 이제 친구 추가후에 채팅창에서 보여줄 안내 대화를 만들기 위해 api를 만들었다. api 만들 때 필요한 상세 내용들은 문서에 잘 나와있다. 아주 간단해서 10분이면 다 만들듯??? 그렇게 만든 api를 aws 프론티어에 올려서 카카오 플러스친구에 연동했다. Develo..

    request-promise를 통해 가져온 euc-kr 문자열 인코딩 문제 해결 (iconv)

    크롤러를 만들기위해 필요로하는 페이지를 가지고 오기위해 request-promise를 사용하였다. 요새 대부분의 홈페이지는 utf-8을 사용하기 때문에 큰 문제가 없으나 euc-kr를 사용하는 옛날 사이트들이 있다. 그런 사이트들의 정보를 그냥 request해서 가지고 오게되면 한글이 다 깨져버린다. 그것을 해결해보자. 우선 request-promise를 사용하여 데이터를 가지고 와보자.12345678const request = require('request-promise'); class Crawler { async crawler() { let doc = await reqest('http://url'); }}Colored by Color Scriptercs 역시 euc-kr를 사용하는 것을 확인하고 있고..

    Elasticsearch 질의 DSL 정리

    엘라스틱 서치를 공부하면서 봤던 DSL 쿼리를 정리해보자. Query와 Filter의 차이Query는 일반적으로 Full Text Search(전문검색)에 사용되고 필터는 YES/NO 조건의 바이너리 구분에 주로 사용된다. 쿼리는 scoring이 계산되나 필터는 계산되지 않는다. 쿼리 결과는 캐싱되지 않고 필터 결과는 캐싱된다. 상대적으로 쿼리는 응답속도가 느리고 필터는 응답속도가 빠르다. term - term은 색인이 나눠지면서 형태소로 나누어지는 저장되는 토큰등을 term이라고 한다. term 쿼리는 주어진 질의문과 저장된 텀과 정확히 일치하는 문장을 찾는다. - term으로 "name" : "cjung gglee" 라고 입력하게 되는경우에는 "cjung gglee"라는 하나의 term을 찾기 때문에..

    백준 알고리즘 2583 - 영역 구하기

    백준 알고리즘 2583번 영역구하기 문제는 DFS를 사용해서 구현해봤다. 문제지를 보자마자 읽기 싫어졌지만 읽어보면 되게 단순하게 많이 접해봤던 문제인거 같다. https://www.acmicpc.net/problem/258312345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612..

    Redis Keys 명령어의 대체 Scan 설명

    Redis에서 Keys 명령어는 성능상으로 문제가 있다. Redis의 One Thread 정책으로 인해서 해당 작업을 처리하기 위해서 서버가 멈춰버린다. 그래서 이를 대안하기 위해서 Redis의 Scan이라는 기능을 사용할 수있다. Scan은 cusor를 기반으로 동작하는 Itorator이다. 처음시작은 scan 번호를 0으로 지정해서 시작한다. 그러면 두 개의 값을 반환을 하는데 첫번째 값은 다음 cursor의 번호이고 그 다음 값은 키값들이 출력된다. 다음 데이터를 찾기위해서는 1번 값에서 반환된 커서 값을 이용해서 검색하면 된다. (scan 9) 그리고 scan 후 나온 다음 cursor의 값이 0인경우 그 이후에 값이 없음을 의미한다. Option #Count Option scan은 모든 반복에서..

반응형