본문 바로가기

Category

(227)
[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에 저장된 각 정수의 값 자체를 우선순위라고 간주하자. ..
[ElasticSearch] 5. 분석기(Analyzer)와 토크나이저, 필터 분석기(Analyzer) 엘라스틱 서치는 전문 검색을 지원하기 위해 역인덱싱을 지원한다. 전문 검색은 장문 문자열에서 부분 검색을 수행하는 것이며, 이 장문의 문자열을 작은 단위(Token)으로 쪼개는 것을 역인덱싱이라고 한다. 양질의 결과를 위해, 문자열을 나누는 기준이 중요하며(지금까지의 예제인 standard는 일부분이긴 하지만 “ “공백으로 나눴다.), 이를 위해 ‘캐릭터 필터’, ‘토크나이저’, ‘토큰 필터’ 로 구성된 분석기 모듈을 가지고 있다. 캐릭터 필터 : 옵션 토크나이저 : 반드시 포함 토큰 필터 : 옵션 개념과 이해 분석기의 역할은 크게 두 부분으로 나눌 수 있다: 인덱싱 시: 도큐먼트를 인덱스에 추가할 때, 분석기는 텍스트 필드를 토큰으로 분리하고, 필요한 경우 추가적인 처리(예: ..
1620 - 나는야 포켓몬 마스터 이다솜(S4) 문제 https://www.acmicpc.net/problem/1620 풀이 Entry를 통해 전부 찾기보다는, TC가 10만개선이기 때문에 HashMap을 두 개 확보하여 GET을 통해 출력하게 하였다. try-catch문 사용하여 랜덤 문자열을 구분하였음. 코드 import java.util.*; import java.io.*; public class Main { static int N, M; static HashMap hm = new HashMap(); static HashMap hm2 = new HashMap(); public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new In..
1764 - 듣보잡(S4) 문제 https://www.acmicpc.net/problem/1764 풀이 HashSet으로 값을 추가한 후, contains를 사용하여 중복값을 확인. 이후 중복값은 PriorityQueue를 통해 출력하였음. Class에 Comparator를 굳이 달 필요는 없었다. 코드 import java.util.*; import java.io.*; public class Main { static int N, M; static HashSet hs = new HashSet(); static PriorityQueue pq = new PriorityQueue(); public static void main(String[] args) throws Exception { BufferedReader br = new Buf..
[ElasticSearch] 4. 필드와 멀티 필드, 인덱스 템플릿 필드와 멀티 필드 전문 검색의 경우 검색과 동시에 정렬이 필요한 경우도 있다. 이럴 경우 단일 필드 입력에 여러 하위 필드를 정의하여 사용한다. 필드 Elasticsearch의 문서는 여러 개의 필드(field)로 구성된다. 각 필드는 특정한 데이터 타입을 가진다. 예를 들면, string, integer, date 등이 있다. 매핑(mapping)에서는 각 필드의 데이터 타입, 분석 방법 등을 정의한다. { "properties": { "title": { "type": "text" } } } 멀티 필드 (Multi-field) 멀티 필드는 하나의 필드를 여러 방식으로 인덱싱하려고 할 때 사용된다. 예를 들어, 텍스트 필드가 있을 때, 한 번은 원본 텍스트로, 다른 한 번은 키워드로 인덱싱하고 싶다면 멀..