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을 지정하고자 하는 경우는 `,`를 사용한다. 예를 들어 `정치`, `경제` 뉴스를 검색하고자 하면 다음과 같이 지정한다:

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

경제 뉴스 전체 검색

경제 뉴스 중 2018-1-1~2018-2-1 검색

전체 뉴스 중 삼성전자 검색

경제 뉴스 중 삼성전자 검색

삼성전자 뉴스 페이징

연산자의 활용

Query String Syntax

쿼리 문자열은 쿼리 파서를 통해 항(Term)과 연산자들로 파싱된다. 하나의 항은 하나의 단어(예를 들어 금리 혹은 이자)일 수도 있고, 혹은 두 단어 이상이 연속적으로 연결된 문서를 검색하기 위해 사용하는 "로 묶인 문장(예를 들어 "기준금리 인하")일 수도 있다.

연산자는 검색 알고리즘의 동작을 변경하기 위해 사용할 수 있다. 이에 대한 자세한 내용은 후술하기로 한다.

Field Names

입력한 쿼리의 검색 대상은 기본적으로 문서의 제목과 본문이지만, 다음과 같이 특정한 필드를 지정하는 것도 가능하다:

제목에서 `삼성전자`를 검색하는 경우

제목에서 `삼성전자` 혹은 `구글`을 검색하는 경우

언론사 이름으로 검색하는 경우

사업자 등록번호로 검색하는 경우

Proximity Searches

"로 묶인 문장 쿼리의 경우 나열된 두 개 이상의 단어가 정확히 같은 순서로 일치하는 문서만 검색 결과에 나타난다. 이와 달리 Proximity Query를 사용하면 쿼리에 나열된 단어가 지정한 범위 내에서 일치하는 경우에도 검색 결과에 나타난다. 다음 쿼리를 보자:

이 경우 `삼성전자`와 `아이폰`이란 단어가 문서 내에서 5단어 이내의 거리에서 함께 나타날 경우 입력 쿼리와 일치한다고 판단하게 된다. 다음은 상기 쿼리로 검색할 수 있는 문장의 예이다:

Boolean Operators

기본적으로 모든 단어는 AND 연산으로 처리되므로 쿼리에 나열된 모든 단어가 일치하는 문서가 검색 결과에 나타나게 된다. 하지만 보다 정교한 검색을 위해서 AND, OR, NOT 등의 기본적인 boolean 연산자와 쿼리 그룹핑 기능을 제공한다.

예를 들어 삼성전자 관련 뉴스 중에서도 갤럭시 혹은 아이폰에 관련된 뉴스만을 검색하고자 하면 다음과 같은 쿼리를 사용하면 된다:

연산자를 명시하지 않은 모든 단어들은 기본적으로 AND로 처리되므로 상기 쿼리는 다음과 같이 재작성할 수 있다:

이렇게 검색된 뉴스들 중에 애플 관련 소송 뉴스를 제외하고자 한다면 다음과 같이 쿼리를 개선할 수 있다:

상기 쿼리 그대로 제목만을 대상으로 검색하고자 하는 경우는 다음과 같이 쿼리를 재작성할 수 있다:

제목에서 `소송`이 언급된 경우만을 제외하고자 한다면 다음과 같이 쿼리를 재작성할 수 있다:

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를 사용하면 다음과 같이 쿼리를 작성할 수 있다:

OR 연산자 뿐만 아니라 검색 쿼리와 동일하게 AND, NOT 등의 boolean 연산자를 사용할 수 있다.

ESG 의 활용

ESG 권한이 부여된 경우, 개별 뉴스에 대한 검색 결과값에 ESG 결과가 추가되며, 결과는 E(환경), S(사회), G(지배구조), U(ESG 아님) 중 하나이며, E,S,G 인 경우 각각에 대해서 긍정/중립/부정의 값을 가지고 있다.

이를 활용하여, 다음과 같은 응용이 가능하다.

  1. 뉴스의 결과에 ESG 여부 및 ESG 긍부정 여부를 표기한다.

  2. 최근 뉴스 중 ESG 뉴스만을 검색한다. 예를 들어, 최근 뉴스 중 지배구조와 관련된 부정적인 뉴스만 검색할 수 있다.

  3. 특정 기업에 대한 ESG 뉴스만을 검색한다. 예를 들어, 삼성전자와 관련된 뉴스 중, ESG 뉴스만을 검색할 수 있다.

각각의 경우에 대한 API 호출 예시는 아래와 같다.

Examples

다음은 실제 다양한 서비스에서 쿼리를 작성한 예제이다.

핀테크

기관동향

실적

배당

References

산업 분류 코드 리스트

Last updated

Was this helpful?