Search
다양한 문서를 검색 가능하게 제공한다.
문서 검색
Query
모든 category, section 검색
GET /haystack/v1/_search[?arg=value, ...]특정 category의 모든 section 검색
GET /haystack/v1/<string:category>/_search[?arg=value, ...]특정 category의 특정 section 검색
GET /haystack/v1/<string:category>/<string:section>/_search[?arg=value, ...]Category 및 Section 옵션
Category, Section
뉴스: news
정치: politics
경제: economy
사회: society
문화: culture
세계: world
기술/IT: tech
연예: entertainment
사설: opinion
증권사 보고서: research
시장 전망: market
투자전략: strategy
기업 보고서: company
산업 보고서: industry
경제 보고서: economy
채권 보고서: bond
공시,IR : company
IR : ir
공시 : disclosure
특허 : patent
특허 : patent
여러 category 및 section을 지정하고자 하는 경우는 `,`를 사용한다. 예를 들어 `정치`, `경제` 뉴스를 검색하고자 하면 다음과 같이 지정한다:
GET /haystack/v1/news/politics,economy/_search[?arg=value, ...]URL Parameters
query
검색어
min_score
검색결과에 포함되기 위한 최소 정확도
기본값: 0.15, 큰 값을 지정할수록 정확도가 높은 문서만 검색함
uniquify
1 : 중복 문서를 제거 0, : 중복 문서 제거 안함. ( 기본값 : 1 )
count
한 페이지에 표시할 문서의 최대 개수
page
페이지 번호
from / to
검색 대상 날짜 범위 지정 (기본값: 전체)
summary
1: 문서 요약, 0: 문서 요약하지 않음 (기본값: 1)
highlight
1: 하이라이트 사용, 0: 하이라이트 사용 안 함 (기본값: 0)
clustering
1: 문서 클러스터링 사용, 0: 문서 클러스터링 사용 안 함 (기본값: 0)
sample_size
클러스터링 시 사용할 샘플 문서 개수 (기본값: 30)
count를 10으로 지정하고 sample_size를 50으로 지정하면 50개의 문서를 10개의 클러스터로 분류한다는 의미이다.
fields
결과값으로 어떤 항목을 노출한 것인지 지정한다.
예를 들어, fields=title, content_url 로 설정하면, 결과 내역에서 제목 및 원문링크값을 리턴한다.
예시 : 삼성전자에 대한 뉴스 검색 결과 중 제목 및 원문링크만을 리턴
https://api.snek.ai/haystack/v1/news/_search?query=삼성전자&clustering=1&fields=title,content_url
Results
uid/uid_str
개별 문서의 unique id.
category/section
해당 문서의 카테고리 및 섹션 정보
publisher/author
신문사나 증권사 명 등 해당 문서를 작성한 주체 및 작성자
title
제목
content
요약 혹은 본문
highlight
title, content 에서 검색어와 일치하는 부분의 내용을 일부 표시한다.
securities
연관 종목. 해당 문서가 특정 기업에 대한 뉴스인 것으로 판단될 때에만 표기 한다.
entities
언급 종목. 해당 기사에서 언급하고 있는 모든 기업을 리스팅 한다.
named_entities
뉴스 등에서 추출한 기업, 인물, 브랜드, 사업자 등록번 등을 추출한다. 이때 기업은 상장 뿐 아니라, 비상장 기업도 포함된다.
industry
분류된 산업. 해당 기사의 내용을 기반으로 산업 인식 결과를 표한다.
label: 표준산업코드의 중분류 코드값
name: 표준산업코드의 중분류 명칭
score: label에 대한 신뢰 점수
점수 구간: [0.0 ~ 1.0]
polarity
분류된 극성. 해당 기사의 내용을 기반으로 긍정/중립/부정의 인식 결과를 표시한다.
polarity.label: 부정(-1), 중립(0), 긍정(1)에 대한 코드값
polarity.name: 극성 명칭
polarity.score: label에 대한 신뢰 점수
점수 구간: [0.0 ~ 1.0]
esg
분류된 ESG(환경(Environmental), 사회(Social), 지배구조(Governance)). 해당 기사의 내용을 기반으로 ESG 인식 결과 및 그에 따른 극성을 표시한다.
esg.category: 분류된 ESG 인식 결과
esg.category.label: 환경(E), 사회(S), 지배구조(G), 해당없음(U)에 대한 코드값
esg.category.name: ESG 명칭
esg.category.score: label에 대한 신뢰 점수
점수 구간: [0.0 ~ 1.0]
esg.polarity: 분류된 ESG에 따른 극성
esg.polarity.label: 부정(-1), 중립(0), 긍정(1)에 대한 코드값
esg.polarity.name: 극성 명칭
esg.polarity.score: label에 대한 신뢰 점수
점수 구간: [0.0 ~ 1.0]
image_urls
이미지 링크 주소
content_url
원문 기사 주소
created_at
기사 생성 시간
updated_at
기사 수정 시간
profile
검색에 소요된 시간을 밀리세컨드(천분의 1초) 로 나타낸다.
cluster_info
클러스터링 옵션을 켠 경우, 클러스토링 설정 정보를 표기한다.
total_matches
검색된 문서 개수
max_score
내부에서 사용하는 검색 Score 의 최대값
current_page
현재 페이지 번호 ( input 에서 page 로 지정할 수 있다. )
last_page
최대 페이지 번호 ( 최대 100 페이지까지만 지원한다. 100 페이지 미만인 경우에는 해당 숫자가, 그 이상인 경우에는 100으로 표기된다. )
Examples
경제 뉴스 전체 검색
api.ddi.deepsearch.com/haystack/v1/news/economy/_search?query=*경제 뉴스 중 2018-1-1~2018-2-1 검색
api.ddi.deepsearch.com/haystack/v1/news/economy/_search?query=*&from=20180101&to=20180201전체 뉴스 중 삼성전자 검색
api.ddi.deepsearch.com/haystack/v1/news/_search?query=삼성전자&clustering=1&count=50경제 뉴스 중 삼성전자 검색
api.ddi.deepsearch.com/haystack/v1/news/economy/_search?query=삼성전자&clustering=1&count=50삼성전자 뉴스 페이징
api.ddi.deepsearch.com/haystack/v1/news/economy/_search?query=삼성전자&clustering=1&count=50&page=2연산자의 활용
Query String Syntax
쿼리 문자열은 쿼리 파서를 통해 항(Term)과 연산자들로 파싱된다. 하나의 항은 하나의 단어(예를 들어 금리 혹은 이자)일 수도 있고, 혹은 두 단어 이상이 연속적으로 연결된 문서를 검색하기 위해 사용하는 "로 묶인 문장(예를 들어 "기준금리 인하")일 수도 있다.
연산자는 검색 알고리즘의 동작을 변경하기 위해 사용할 수 있다. 이에 대한 자세한 내용은 후술하기로 한다.
Field Names
입력한 쿼리의 검색 대상은 기본적으로 문서의 제목과 본문이지만, 다음과 같이 특정한 필드를 지정하는 것도 가능하다:
제목에서 `삼성전자`를 검색하는 경우
title:삼성전자제목에서 `삼성전자` 혹은 `구글`을 검색하는 경우
title:(삼성전자 or 구글)언론사 이름으로 검색하는 경우
publisher:한겨레사업자 등록번호로 검색하는 경우
named_entities.entities.company.business_rid:'124-81-00998'
named_entities.entities.company.business_rid:('124-81-00998' or '107-86-14075')Proximity Searches
"로 묶인 문장 쿼리의 경우 나열된 두 개 이상의 단어가 정확히 같은 순서로 일치하는 문서만 검색 결과에 나타난다. 이와 달리 Proximity Query를 사용하면 쿼리에 나열된 단어가 지정한 범위 내에서 일치하는 경우에도 검색 결과에 나타난다. 다음 쿼리를 보자:
"삼성전자 아이폰"~5이 경우 `삼성전자`와 `아이폰`이란 단어가 문서 내에서 5단어 이내의 거리에서 함께 나타날 경우 입력 쿼리와 일치한다고 판단하게 된다. 다음은 상기 쿼리로 검색할 수 있는 문장의 예이다:
소장에는 삼성전자가 아이폰의 둥근 모서리와 베젤 디자인 특허를 침해했다는 내용이 담겼다.
삼성전자는 항소심에서 아이폰 특허 중 일부가 무효판정을 받으면서 삼성의 손해배상액은 5억4817만6477달러로 줄어들었다.Boolean Operators
기본적으로 모든 단어는 AND 연산으로 처리되므로 쿼리에 나열된 모든 단어가 일치하는 문서가 검색 결과에 나타나게 된다. 하지만 보다 정교한 검색을 위해서 AND, OR, NOT 등의 기본적인 boolean 연산자와 쿼리 그룹핑 기능을 제공한다.
예를 들어 삼성전자 관련 뉴스 중에서도 갤럭시 혹은 아이폰에 관련된 뉴스만을 검색하고자 하면 다음과 같은 쿼리를 사용하면 된다:
삼성전자 and (갤럭시 or 아이폰)연산자를 명시하지 않은 모든 단어들은 기본적으로 AND로 처리되므로 상기 쿼리는 다음과 같이 재작성할 수 있다:
삼성전자 (갤럭시 or 아이폰)이렇게 검색된 뉴스들 중에 애플 관련 소송 뉴스를 제외하고자 한다면 다음과 같이 쿼리를 개선할 수 있다:
삼성전자 (갤럭시 or 아이폰) !소송상기 쿼리 그대로 제목만을 대상으로 검색하고자 하는 경우는 다음과 같이 쿼리를 재작성할 수 있다:
title:(삼성전자 (갤럭시 or 아이폰) !소송)제목에서 `소송`이 언급된 경우만을 제외하고자 한다면 다음과 같이 쿼리를 재작성할 수 있다:
삼성전자 (갤럭시 or 아이폰) !title:소송Named Search Query
검색 쿼리가 여러 단어와 연산자들로 구성되어 복잡할 경우 해당 쿼리에 이름을 지정하여 관리 및 개발 편의성을 높일 수 있는데, Haystack에서는 이를 Named Query라 한다. 문법은 다음과 같다:
쿼리 이름(선택) :: 검색 쿼리예를 들어 `개성공단` 관련 기사를 제외한 `북한 핵실험`과 `사드`관련 기사만 검색하고자 할 경우 다음과 같은 쿼리를 작성할 수 있다:
"북한 핵실험" 사드 !개성공단사용자에게는 이런 자세한 쿼리는 노출하지 않고 단순히 "북한 핵실험"으로만 노출하고자 하는 경우 Named Query를 사용하면 된다:
"북한 핵실험" :: "북한 핵실험" 사드 !개성공단참고로 쿼리 이름이 두 단어 이상일 경우는 상기 예와 같이 "로 묶어야 한다.
이렇게 Named Query를 사용하여 검색 결과의 docs.attributes.query_name 속성에 지정한 쿼리 이름을 포함시킬 수 있다.
Filtered Search Query
문서 검색이 완료된 후 선택적으로 특정 조건에 따라 문서를 검색 결과에서 제거하는 것도 가능하다. Haystack에서는 이를 Filtered Query라 한다. 문법은 다음과 같다:
쿼리 이름(선택) :: 검색 쿼리 => 필터 조건(선택)보통의 검색엔진 알고리즘과 쿼리 문법은 개별 문서에 대한 Term Vector에 접근할 방법을 사용자에게 제공하지 않는다. 따라서 특정 단어가 문서 내에서 언급되는 빈도와 같은 정보에 직접 접근하는 것이 불가능하다. Haystack 역시 동일한 한계가 있으나, Filtered Query를 그 대안으로 제공한다. 다만 Term Vector를 직접 접근하는 것이 아니라 이미 완성된 검색 결과에서 개별 문서에 대한 조건을 재검토하는 과정을 거치므로 사용자가 기대한 문서의 개수보다 적은 개수의 문서가 화면에 나타날 수 있다는 잠재적인 문제점이 있으므로 주의해서 사용해야 한다.
예를 들어 `개성공단`이 제목에서 최소 한 번 혹은 본문에서 최소 두 번 이상 언급된 문서만을 검색 결과에 노출하고자 할 경우를 생각해보자. Filtered Query를 사용하면 다음과 같이 쿼리를 작성할 수 있다:
개성공단 => term.exists(title:"개성공단") or term.freq(content:"개성공단") >= 2OR 연산자 뿐만 아니라 검색 쿼리와 동일하게 AND, NOT 등의 boolean 연산자를 사용할 수 있다.
삼성전자 애플 소송 => term.exists(title:소송) and (term.exists(content:아이폰) or term.exists(content:갤럭시))ESG 의 활용
ESG 권한이 부여된 경우, 개별 뉴스에 대한 검색 결과값에 ESG 결과가 추가되며, 결과는 E(환경), S(사회), G(지배구조), U(ESG 아님) 중 하나이며, E,S,G 인 경우 각각에 대해서 긍정/중립/부정의 값을 가지고 있다.
이를 활용하여, 다음과 같은 응용이 가능하다.
뉴스의 결과에 ESG 여부 및 ESG 긍부정 여부를 표기한다.
최근 뉴스 중 ESG 뉴스만을 검색한다. 예를 들어, 최근 뉴스 중 지배구조와 관련된 부정적인 뉴스만 검색할 수 있다.
특정 기업에 대한 ESG 뉴스만을 검색한다. 예를 들어, 삼성전자와 관련된 뉴스 중, ESG 뉴스만을 검색할 수 있다.
각각의 경우에 대한 API 호출 예시는 아래와 같다.
1. 뉴스 결과의 ESG 정보
1) api.ddi.deepsearch.com/haystack/v1/news/economy/_search?query=*
2) 검색 결과에 추가된 ESG 정보를 활용하여, 결과 표기
(예시) ESG 뉴스 아님
"esg": {
"category": {
"label": "U",
"name": "해당없음",
"score": 1.0
},
"polarity": {
"label": "0",
"name": "중립",
"score": 1.0
}
2. 최근 뉴스 중 ESG 뉴스만을 검색 ( 지배구조 부정 이슈 )
1) api.ddi.deepsearch.com/haystack/v1/news/economy/_search?query=*
and esg.category.label:"G" and esg.polarity.label:"-1"
2) 검색결과에 지배구조 부정 이슈만 검색됨
3. 특정 기업에 대한 ESG 뉴스만을 검색
1) api.ddi.deepsearch.com/haystack/v1/news/economy/_search?query=securities.symbol:"005930"
and not esg.category.label:"U"
2) 검색결과에 삼성전자 뉴스 중 ESG 이슈만 검색됨 Examples
다음은 실제 다양한 서비스에서 쿼리를 작성한 예제이다.
핀테크
간편결제::간편결제 or 애플페이 or 삼성페이 or lg페이 or 라인페이; 로보어드바이저; \
인터넷은행::인터넷은행 or 카카오뱅크 or k뱅크 or i뱅크; \
"P2P 대출"::"개인간 대출" or (p2p and (금융 or 대출)) or 8percent or 8퍼센트 or 렌딧 or lendit; \
위버플; 옐로금융그룹; 블록체인::블록체인 or 비트코인; 핀테크::제목:핀테크기관동향
트러스톤자산운용;라자드코리아운용;메리츠운용;에셋플러스운용;한국투자밸류자산;신영운용;스팍스운용;이스트스프링자산운용;한화운용;마이다스운용실적
실적 :: (실적 AND 매출) OR 자산재평가 !파트너배당
배당 :: (배당 or 현금배당 or 중간배당 or 주식배당) and !무배당References
산업 분류 코드 리스트
'100': '분류 제외, 기타',
'A01': '농업',
'A02': '임업',
'A03': '어업',
'B05': '석탄, 원유 및 천연가스 광업',
'B06': '금속 광업',
'B07': '비금속광물 광업; 연료용 제외',
'C10': '식료품 제조업',
'C11': '음료 제조업',
'C12': '담배 제조업',
'C14': '의복, 의복 액세서리 및 모피제품 제조업',
'C15': '가죽, 가방 및 신발 제조업',
'C16': '목재 및 나무제품 제조업; 가구 제외',
'C17': '펄프, 종이 및 종이제품 제조업',
'C20': '화학 물질 및 화학제품 제조업; 의약품 제외',
'C21': '의료용 물질 및 의약품 제조업',
'C22': '고무 및 플라스틱제품 제조업',
'C23': '비금속 광물제품 제조업',
'C24': '1차 금속 제조업',
'C26': '전자 부품, 컴퓨터, 영상, 음향 및 통신장비 제조업',
'C27': '의료, 정밀, 광학 기기 및 시계 제조업',
'C28': '전기장비 제조업',
'C29': '기타 기계 및 장비 제조업',
'C30': '자동차 및 트레일러 제조업',
'C31': '기타 운송장비 제조업',
'C32': '가구 제조업',
'C33': '기타 제품 제조업',
'F41': '종합 건설업',
'H49': '육상 운송 및 파이프라인 운송업',
'H50': '수상 운송업',
'H51': '항공 운송업',
'H52': '창고 및 운송관련 서비스업',
'I55': '숙박업',
'I56': '음식점 및 주점업',
'J58': '출판업',
'J59': '영상ㆍ오디오 기록물 제작 및 배급업',
'J61': '우편 및 통신업',
'K64': '금융업',
'K65': '보험 및 연금업',
'L68': '부동산업',
'M71': '전문 서비스업',
'N76': '임대업; 부동산 제외',
'P85': '교육 서비스업',
'Q86': '보건업',
'R90': '창작, 예술 및 여가관련 서비스업',
'R91': '스포츠 및 오락관련 서비스업'Last updated
Was this helpful?