본문 바로가기

전체 글

(215)
[ES] kibana 자동 실행 변경 1. Kibana.service 파일 생성 경로는 다음과 같이 설정하였다. /etc/systemd/system/kibana.service // kibana.service 파일 예시 [Unit] Description=Kibana //설명 [Service] ExecStart=/home/ubuntu/elasticsearch/kibana/bin/kibana //파일 경로 Restart=always User=ubuntu //사용 유저 Environment=NODE_ENV=production [Install] WantedBy=multi-user.target 2. 명령어 및 실행 다음 명령어로 서비스를 시작하고 시스템 시작 시 자동으로 실행되게 설정한다. sudo systemctl start kibana sudo s..
[ElasticSearch] 8. 클러스터와 노드의 구조 기본 개념 클러스터(Cluster) 일반적으로 컴퓨터 시스템에서의 클러스터는 여러 컴퓨터를 병렬로 연결하여 하나의 시스템으로 묶는다는 개념으로 쓰인다. 이렇게 하면 시스템 장애를 대비해 고가용성을 챙기며, 시스템 성능도 높일 수 있기 때문이다. (하나가 고장나도 다른 컴퓨터가 이를 대체하며, 병렬 처리를 가능하게 한다.) ElasticSearch에서는 여러 노드들의 집합을 의미한다. 클러스터는 하나의 유니크한 이름으로 식별되며, 이 이름은 클러스터에 참여하는 노드들이 연결될 때 사용된다. 노드(Node) 엘라스틱 서치에서 클러스터의 일부로 동작하는 인스턴스. 일반적으로 한 개의 컴퓨터(혹은 서버)에 하나의 노드를 구성한다. 이는 물리적/가상적 단위로도 구분되기도 한다. 데이터의 저장과 색인, 검색 작업을..
여행지 오픈 API 설명과 Elastic Search를 사용한 아이디어. 우리 팀은 주니어 개발자들을 위한 'Trip Open API'를 만들고 있다. 이 API는 기존의 공공데이터 중 여행지의 정보가 너무 부실했기 때문에, API를 사용하는 사용자들이 조금 더 확장된 기능과 편리함을 느낄 수 있도록 계획하였다. 이 과정에서 편리함과 효율성으로 생각한 것은 '추천' 과 '확장된 정보'이다. 기존 공공데이터 API의 경우 여행지명과 지역 위치, 간단한 설명과 위경도만 존재했다. 한정된 데이터였기에, Selenium을 통해 기존 데이터를 기반으로 정보를 추가적으로 스크래핑해서 관련된 음식점, 숙소, 평점 등을 추가할 예정이다. 또한 전문 검색과 키워드 단위로 나눈 '추천 키워드' 개발을 통해 명확하지 않은 개념에도 여행지를 추천할 수 있다. 기본적으로 1차 수집 데이터는 Mong..
[ElasticSearch] 7. 쿼리 개요 엘라스틱서치는 검색을 위해 리프 쿼리와 복합 쿼리를 지원한다. 리프 쿼리는 특정 필드에서 용어를 찾는 쿼리로, match / term / range 쿼리로 나뉜다. 복합 쿼리는 쿼리들을 조합해 사용하고 대표적으로 이전 포스팅에서 설명했던 논리 쿼리 등이 존재한다. 전문 쿼리와 용어 수준 쿼리 이전 시간의 keyword와 text의 차이에 대해 생각해보자. - 전문 쿼리 : 전문 검색을 위해 사용하며 필드는 매핑 시 text 타입으로 선언해야 한다. - 용어 수준 쿼리는 정확히 일치하는 용어를 찾기 위해 사용하며, keyword로 선언한다. 전문 쿼리 매치 쿼리 - 전문 검색 실행(text) 매치 쿼리는 대표적인 전문 쿼리로, 특정 필드의 용어를 검색하는데 사용한다. //1. 특정 필드 검색하기 GE..
[ElasticSearch] 6. 검색 : 컨텍스트와 쿼리, 유사도 컨텍스트 구버전의 엘라스틱서치는 쿼리 컨텍스트와 필터 컨텍스트로 구분되었다고 한다. 쿼리 컨텍스트는 질의에 대한 유사도를 계산하고 정확한 결과를 구분하고, 필터 컨텍스트는 유사도가 아닌 일치 여부에 따른 결과만을 계산했다. 두 컨텍스트의 개념에 대해 조금 더 자세히 알아보자. 쿼리 컨텍스트 - 유사도를 구분하여 검색 (ex : 스코어가 4.5인 검색 결과) - 유사도 검색 때문에 검색 속도가 상대적으로 느림 //Kibana에서 제공하는 샘플 데이터를 사용하여 쿼리컨텍스트를 실행해보자. //_search : 엘라스틱에서 제공하는 REST API GET kibana_sample_data_ecommerce/_search { "query": { "match": { //전문 검색을 위한 쿼리, 역인덱싱용 용어 검..
7576 - 토마토(G5) 1. 문제 https://www.acmicpc.net/problem/7576 입력 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는 상자에 담긴 토마토의 정보가 주어진다. 하나의 줄에는 상자 가로줄에 들어있는 토마토의 상태가 M개의 정수로 주어진다. 정수 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마토가 들어있지 않은 칸을 나타낸다. 토마토가 하나 이상 있는 경우만 입력으로 주어진다. 출력 여러분은 토마토가 모두 익을 때까지의 최소 날짜를 출력해야 한다. 만약, 저장될..
17141 - 연구소(G4) 문제 https://www.acmicpc.net/problem/17141 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 승원이는 연구소의 특정 위치에 바이러스 M개를 놓을 것이고, 승원이의 신호와 동시에 바이러스는 퍼지게 된다. 연구소는 크기가 N×N인 정사각형으로 나타낼 수 있으며, 정사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 빈 칸은 바이러스를 놓을 수 있는 칸이다. 바이러스는 상하좌우로 인접한 모든 빈 칸으로 동시에 복제되며, 1초가 걸린다. 예를 들어, 아래와 같이 연구소가 생긴 경우를 살펴보자. 0은 빈 칸, 1은 벽, 2는 바이러스를 놓을 수 있는 칸이다. 2..
7662 - 이중 우선순위 큐(G4) 문제 이중 우선순위 큐(dual priority queue)는 전형적인 우선순위 큐처럼 데이터를 삽입, 삭제할 수 있는 자료 구조이다. 전형적인 큐와의 차이점은 데이터를 삭제할 때 연산(operation) 명령에 따라 우선순위가 가장 높은 데이터 또는 가장 낮은 데이터 중 하나를 삭제하는 점이다. 이중 우선순위 큐를 위해선 두 가지 연산이 사용되는데, 하나는 데이터를 삽입하는 연산이고 다른 하나는 데이터를 삭제하는 연산이다. 데이터를 삭제하는 연산은 또 두 가지로 구분되는데 하나는 우선순위가 가장 높은 것을 삭제하기 위한 것이고 다른 하나는 우선순위가 가장 낮은 것을 삭제하기 위한 것이다. 정수만 저장하는 이중 우선순위 큐 Q가 있다고 가정하자. Q에 저장된 각 정수의 값 자체를 우선순위라고 간주하자. ..