KR102263637B1 - 검색 시스템을 위한 써드 파티 검색 애플리케이션들 - Google Patents

검색 시스템을 위한 써드 파티 검색 애플리케이션들 Download PDF

Info

Publication number
KR102263637B1
KR102263637B1 KR1020157036845A KR20157036845A KR102263637B1 KR 102263637 B1 KR102263637 B1 KR 102263637B1 KR 1020157036845 A KR1020157036845 A KR 1020157036845A KR 20157036845 A KR20157036845 A KR 20157036845A KR 102263637 B1 KR102263637 B1 KR 102263637B1
Authority
KR
South Korea
Prior art keywords
query
party
search
instructions
search system
Prior art date
Application number
KR1020157036845A
Other languages
English (en)
Other versions
KR20160033666A (ko
Inventor
마이클 핀크
니브 에프론
이얄 핀크
알렉스 곤트마커
아나톨리 보로베이
요씨 마티아스
잭 라이트 멘젤
Original Assignee
구글 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 구글 엘엘씨 filed Critical 구글 엘엘씨
Publication of KR20160033666A publication Critical patent/KR20160033666A/ko
Application granted granted Critical
Publication of KR102263637B1 publication Critical patent/KR102263637B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/243Natural language query formulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/951Indexing; Web crawling techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/74Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Artificial Intelligence (AREA)

Abstract

시스템들 및 방법들이 개시되며, 이들은 써드-파티 제공 검색 애플리케이션들을 갖는 검색 시스템을 제공하고, 써드-파티 제공 검색 애플리케이션들은 특정 쿼리들에 응답하여 트리거되고 검색 시스템에서 실행된다. 예를 들어, 하나의 방법은 검색 시스템에서 호스팅되는 써드 파티 검색 애플리케이션을 쿼리가 트리거시킴을 결정하는 것과; 쿼리 템플릿에 근거하여 쿼리로부터 파라미터를 추출하는 것과; 쿼리에 대한 써드-파티 포맷 회답을 발생시키기 위해 검색 시스템에서 샌드박싱 방식으로 파라미터를 갖는 써드 파티 검색 애플리케이션을 실행시키는 것과; 그리고 쿼리에 대한 검색 결과로서 써드-파티 포맷 회답을 제공하는 것을 포함할 수 있다. 써드 파티는 쿼리 템플릿, 파라미터 속성들, 및 써드 파티 포맷 회답을 제공할 수 있다. 써드 파티 검색 애플리케이션은 검색 시스템에서 저장될 수 있고, 쿼리 템플릿과, 데이터 저장체와, 파라미터 속성들과, 그리고 파라미터를 사용하여 데이터 저장체에 액세스하기 위한 명령들을 포함할 수 있다.

Description

검색 시스템을 위한 써드 파티 검색 애플리케이션들{THIRD PARTY SEARCH APPLICATIONS FOR A SEARCH SYSTEM}
본 출원은 미국 가특허 출원 번호 제61/847,371호(발명의 명칭: "THIRD PARTY SEARCH APPLICATIONS FOR A SEARCH SYSTEM", 출원일: 2013년 7월 17일), 그리고 미국 특허 출원 번호 제13/960,302호(발명의 명칭: "THIRD PARTY SEARCH APPLICATIONS FOR A SEARCH SYSTEM", 출원일: 2013년 8월 6일)에 대해 우선권을 주장한다. 이러한 더 일찍 출원된 특허문헌들의 주된 내용은 참조로 본 명세서에 통합된다.
검색 엔진들(search engines) 혹은 검색 시스템들(search systems)은 정보를 발견하는 인기있는 방법이다. 종래에, 검색 엔진들은 코퍼스(corpus) 내의 문서들을 크롤링(crawling)하고, 문서들에 대한 역 인덱스(inverted index)를 발생시키고, 그리고 어떤 문서들이 검색 쿼리(search query)에 대해 응답하는지를 결정하기 위해 인덱스를 사용한다. 검색 결과들은 일반적으로 쿼리 내의 검색 용어들(search terms) 중 하나 이상의 용어를 포함하는, 응답 문서로부터의 타이틀(title) 및 해당 문서로부터의 텍스트(text)의 스니펫(snippet)을 포함한다. 검색 엔진들이 웹 콘텐츠(web content)의 이러한 인덱싱(indexing)에 근거하여 이와 같은 결과들을 제공하고 있지만, 종래의 검색 엔진들은 써드 파티(third party)들에 의해 호스팅(hosting)되는 데이터를 사용하여 동적으로 발생되는 웹 콘텐츠로부터의 결과들을 제공하지는 못하며, 또는 매우 빈번하게 변하는 콘텐츠를 제공하지 못한다(여기서, "써드 파티들"은 검색 엔진에 의해 제어되지 않는 임의의 서버(server) 혹은 사이트(site)를 포함함). 이러한 문제들 중 일부 문제에 대처하기 위해서, 일부 검색 엔진들은 써드 파티에 의해 호스팅되는 데이터를 라이센싱(licensing)하고 라이센싱된 데이터를 인덱싱한다. 예를 들어, 검색 엔진은 기상 정보 혹은 주식 시장 정보를 라이센싱할 수 있다. 그러나, 이러한 방법은 쉽게 스케일링(scaling)되지 않는데, 왜냐하면 각각의 새로운 입력은 검색 엔진의 인간 운용자들과 써드 파티 간의 상호작용을 요구하기 때문이다.
일부 구현예들은 써드 파티들로 하여금 특정 쿼리들에 응답하여 트리거(trigger)되는 검색 애플리케이션(search application)을 제공할 수 있도록 하는 그러한 인터페이스(interface)를 갖는 검색 시스템을 제공한다. 이러한 인터페이스는 써드 파티로 하여금 검색 애플리케이션을 트리거시키기 위한 기준(criteria)을 제공하게 할 수 있고, 파라미터 정보(parameter information)를 제공하게 할 수 있고, 그리고 쿼리에 대한 하나 이상의 쿼리 회답(query answer)들을 발생시키기 위한 데이터를 제공하게 할 수 있다. 일부 구현예들은 또한, 써드 파티로 하여금 파라미터 정보를 사용하여 데이터에 액세스(access)하는 것 및/또는 자연 언어 회답(natural language answer)을 발생시키는 것을 행하기 위한 명령들을 제공할 수 있도록 한다. 데이터, 트리거 기준, 그리고 데이터를 조작하기 위한 명령들은 검색 시스템 상에 저장될 수 있고, 이것은 검색 애플리케이션의 실행이 빨라지게 할 수 있는데, 왜냐하면 검색 시스템이 검색 애플리케이션을 실행시키기 위해 써드 파티 사이트와 통신할 필요가 없기 때문이다. 이러한 애플리케이션은 악의적 의도를 갖는 써드 파티들에 의해 초래되는 검색 시스템 상의 임의의 악영향들을 피하기 위해 검색 시스템 상에서 샌드박스(sandbox)로 실행될 수 있다. 써드 파티 검색 애플리케이션(third party search application)들에 의해 제공되는 회답들의 품질을 더욱 보장하기 위해, 검색 시스템은 사용자들로 하여금 관련없는 응답들을 보고하도록 할 수 있거나, 혹은 쿼리 요청자에 의해 다른 응답들이 선택되었는지 여부를 모니터링(monitoring)할 수 있다. 검색 엔진에서 애플리케이션이 호스팅되기 때문에, 검색 엔진은 관련없는 결과들 혹은 바람직하지 않은 결과들을 발생시키거나 혹은 검색 시스템에서 바람직하지 않은 결과들을 초래하는 임의의 써드 파티 검색 애플리케이션을 비활성화(disable)시킬 수 있다.
본 개시내용의 일 실시형태는 컴퓨터로 구현되는 방법(computer-implemented method)으로 구현될 수 있는데, 이러한 컴퓨터로 구현되는 방법은, 문서 코퍼스(document corpus)에 대한 역 인덱스로부터 쿼리에 대한 제 1 회답들을 검색 시스템의 적어도 하나의 프로세서를 사용하여 발생시키는 것과; 그리고 쿼리가 쿼리 템플릿(query template)에 대응함을 적어도 하나의 프로세서를 사용하여 결정하는 것을 포함하며, 여기서 쿼리 템플릿은 검색 시스템에서 호스팅되는 써드 파티 검색 애플리케이션과 관련된다. 이러한 결정에 응답하여, 본 방법은, 쿼리 템플릿에 근거하여 쿼리로부터 파라미터를 추출하는 것과; 파라미터를 써드 파티 검색 애플리케이션에 제공하고 써드 파티 검색 애플리케이션을 샌드박싱 환경(sandboxed environment)에서 실행시킴으로써 쿼리에 대한 써드-파티 포맷 회답(third-party formatted answer)을 검색 시스템의 적어도 하나의 프로세서를 사용하여 발생시키는 것과; 그리고 쿼리에 대한 검색 결과로서 제 1 회답들과 함께 써드-파티 포맷 회답을 제공하는 것을 포함할 수 있다. 일부 구현예들에서, 써드-파티 포맷 회답을 발생시키는 것은 써드 파티에 의해 호스팅되는 시스템과의 통신들 없이 일어난다. 일부 구현예들에서, 샌드박싱 환경은 검색 시스템과 같은 곳에 위치하거나 혹은 내부적으로 네트워크로 연결된 시스템 상에서 실행된다. 일부 구현예들에서, 검색 시스템은 샌드박싱 환경의 일부로서 써드-파티 검색 애플리케이션에 대해 이용가능한 리소스(resource)들을 제어한다. 제 1 회답들은 써드-파티 포맷 회답과 동시에 발생될 수 있다.
본 방법은 다음과 같은 특징들 중 하나 이상을 포함할 수 있다. 예를 들어, 써드 파티 검색 애플리케이션은 데이터 저장체(data store)와, 그리고 데이터 저장체에 액세스하기 위한 명령들을 포함할 수 있으며, 써드 파티 검색 애플리케이션은, 데이터 저장체 내에서 레코드(record)를 찾기(look up) 위해 파라미터를 사용하는 것, 그리고 써드-파티 포맷 회답을 발생시키기 위해 레코드로부터의 필드(field)를 사용하는 것을 행함으로써, 써드-파티 포맷 회답을 발생시킬 수 있다. 일부 구현예들에서, 본 방법은 또한, 써드 파티로부터 데이터 저장체에 대한 업데이트 데이터(updated data)를 주기적으로 수신하는 것과, 그리고 데이터 저장체를 업데이트하는 것을 포함할 수 있다. 일부 구현예들에서, 본 방법은 또한, 쿼리 템플릿과, 파라미터를 기술하는 정보와, 데이터 저장체를 기술하는 정보와, 그리고 써드 파티로부터 데이터 저장체에 액세스하기 위한 명령들을 검색 시스템에서 수신하는 것을 포함할 수 있다. 일부 구현예들에서, 이러한 명령들은 검색 시스템의 운용자로부터 수신될 수 있다.
또 하나의 다른 예로서, 써드 파티 검색 애플리케이션은 써드 파티 검색 애플리케이션을 실행시키는 것의 일부로서 파라미터에 관한 계산을 수행하기 위한 명령들을 포함할 수 있다. 또 하나의 다른 예로서, 써드-파티 포맷 회답은 써드 파티에 의해 결정된 문장(sentence)으로 구성될 수 있으며, 이러한 문장은 쿼리로부터 결정된 파라미터를 포함한다. 일부 구현예들에서, 본 방법은 또한, 쿼리의 콘텍스트(context)로부터 제 2 파라미터를 추출하는 것과, 그리고 제 2 파라미터를 써드 파티 검색 애플리케이션에 제공하는 것을 포함할 수 있다. 써드-파티 포맷 회답은 제 2 파라미터가 포함된 문장을 포함할 수 있다. 쿼리의 콘텍스트는, 쿼리 요청자의 위치, 쿼리에 대한 날짜와 시간, 그리고 쿼리 요청자의 사용자-id 중 하나를 포함할 수 있다.
또 하나의 다른 예로서, 본 방법은, 복수의 쿼리들에 걸쳐 앞서의 발생시키는 것과, 결정하는 것과, 추출하는 것과, 그리고 제공하는 것을 반복하는 것과; 제 1 회답들이 선택된 횟수의 양(quantity)을 모니터링하는 것과; 그리고 이러한 횟수의 양이 임계치를 충족시키는 경우, 쿼리 템플릿을 비활성화시키는 것을 포함할 수 있다. 일부 구현예들에서, 쿼리가 쿼리 템플릿에 대응함을 결정하는 것은, 쿼리 템플릿에 대한 소스(source)를 결정하는 것과, 그리고 쿼리가 쿼리 템플릿에 대응함을 결정하기 전에 소스에 대한 신호들이 임계치를 충족시킴을 결정하는 것을 포함할 수 있다. 일부 구현예들에서, 써드-파티 포맷 회답은 파라미터가 포함된 딥 링크(deep link)를 포함한다.
본 개시내용의 또 하나의 다른 실시형태는 컴퓨터 시스템으로 구현될 수 있고, 이러한 컴퓨터 시스템은, 적어도 하나의 프로세서와; 그리고 명령들을 저장하는 메모리를 포함하며, 여기서 명령들은 적어도 하나의 프로세서에 의해 실행될 때, 검색 시스템으로 하여금 동작들을 수행하도록 한다. 이러한 동작들은 써드-파티로부터 쿼리 템플릿을 수신하는 것을 포함하고, 여기서 쿼리 템플릿은 적어도 하나의 파라미터를 갖는 정규 표현(regular expression)을 포함한다. 동작들은 또한, 써드 파티로부터 파라미터에 대한 하나 이상의 속성(attribute)들을 수신하는 것과, 그리고 써드 파티로부터 데이터 저장체를 수신하는 것을 포함할 수 있다. 데이터 저장체는 속성들 및 데이터를 포함할 수 있다. 동작들은 또한, 파라미터를 사용하여 데이터 저장체에 액세스하기 위한 명령들을 써드 파티로부터 수신하는 것과; 그리고 데이터 저장체에 대한 데이터, 데이터 저장체의 속성들, 파라미터 속성들, 및 쿼리 템플릿을 써드 파티 검색 애플리케이션으로서 검색 시스템에서 저장하는 것을 포함할 수 있다. 이러한 수신하는 것과 저장하는 것은 검색 시스템의 인간 운용자의 개입 없이 자동으로 일어날 수 있다.
본 시스템은 다음과 같은 특징들 중 하나 이상을 포함할 수 있다. 예를 들어, 수신하는 것과 저장하는 것은 복수의 별개의 써드 파티들에 대해 반복될 수 있고, 본 시스템은 하나보다 많은 써드-파티 검색 애플리케이션이 쿼리와 매칭(matching)되는 쿼리 템플릿을 갖는 경우 쿼리에 대한 하나보다 많은 써드-파티 포맷 회답을 제공할 수 있다. 또 하나의 다른 예로서, 앞서의 동작들은 또한, 쿼리가 쿼리 템플릿에 대응함을 결정하는 것과; 쿼리에 대한 써드-파티 포맷 회답을 발생시키는 것 및 데이터 저장체에 액세스하기 위한 명령들을 실행시키는 것과; 그리고 쿼리에 대한 검색 결과로서 써드-파티 포맷 회답을 제공하는 것을 포함할 수 있다. 써드-파티 포맷 회답을 발생시키는 것은 쿼리로부터 추출된 파라미터 값을 써드 파티 검색 애플리케이션에 제공하는 것을 포함할 수 있다. 검색 시스템은 써드 파티 서버와 통신함이 없이 쿼리 시간(query time)에 써드-파티 포맷 회답을 발생시킬 수 있다. 써드-파티 포맷 회답에는 쿼리 요청자로 하여금 회답에 대한 불만족을 표시할 수 있도록 하는 링크(link)가 제공될 수 있다. 본 시스템은 또한, 문서 코퍼스 내의 문서들의 역 인덱스를 포함할 수 있고, 앞서의 동작들은 또한, 쿼리에 응답하여 문서들의 인덱스를 검색함으로써 쿼리에 대한 스니펫-기반 회답(snippet-based answer)들을 발생시키는 것과; 그리고 스니펫-기반 회답들 및 써드-파티 포맷 회답을 쿼리에 대한 검색 결과로서 제공하는 것을 포함할 수 있다.
또 하나의 다른 예로서, 본 시스템은 또한, 관계(relationship)들에 의해 링크된 엔티티(entity)들을 저장하는 그래프-기반 데이터 저장체(graph-based data store)를 포함하고, 파라미터에 대한 속성들은 그래프-기반 데이터 저장체에 대한 엔티티 집합체(entity collection)을 포함할 수 있다. 이러한 구현예에서, 써드-파티 포맷 회답을 발생시키는 것은, 쿼리 템플릿의 파라미터에 대응하는 쿼리의 일부분을 결정하는 것과; 쿼리의 일부분이 엔티티 집합체 내의 엔티티의 속성에 대응함을 결정하는 것과; 그리고 엔티티의 속성을 파라미터 값으로서 써드 파티 검색 애플리케이션에 제공하는 것을 포함할 수 있다.
일부 구현예들에서, 써드-파티 검색 애플리케이션은 검색 시스템에서 호스팅되는 복수의 써드-파티 검색 애플리케이션들 중 하나이며, 써드-파티 포맷 회답을 발생시키는 것은, 쿼리에 대응하는 쿼리 템플릿들을 결정하기 위해 복수의 써드-파티 검색 애플리케이션들과 관련된 쿼리 템플릿들을 평가(evaluating)하는 것과; 쿼리에 대응하는 쿼리 템플릿들에 대한 각각의 써드-파티 포맷 회답들을 발생시키는 것과; 그리고 검색 결과의 일부로서 각각의 써드-파티 포맷 회답들을 제공하는 것을 포함한다. 일부 구현예들에서, 데이터 저장체에 액세스하기 위한 명령들은 검색 시스템의 관리자에 의해 제공되며, 일부 구현예들에서는, 써드 파티가 데이터 저장체에 액세스하기 위한 명령들을 제공한다. 검색 시스템은 검색 시스템의 인간 운영자와는 독립적으로 명령들 및 데이터 저장체를 검색 엔진과 통합시킬 수 있다.
본 개시내용의 또 하나의 다른 실시형태는 검색 시스템으로 구현될 수 있고, 이러한 검색 시스템은, 적어도 하나의 프로세서와; 그리고 명령들을 저장하는 메모리를 포함하며, 여기서 명령들은 적어도 하나의 프로세서에 의해 실행될 때, 검색 시스템으로 하여금 동작들을 수행하도록 한다. 이러한 동작들은 쿼리가 검색 시스템에서 호스팅되는 써드 파티 검색 애플리케이션을 트리거시킴을 결정하는 것을 포함할 수 있다. 써드 파티 검색 애플리케이션은 검색 시스템에서 호스팅되는 복수의 써드 파티 검색 애플리케이션들 중 하나일 수 있다. 동작들은 또한, 써드 파티 검색 애플리케이션과 관련된 쿼리 템플릿에 근거하여 쿼리로부터 파라미터를 추출하는 것과; 그리고 검색 시스템에서 샌드박싱 방식으로 파라미터를 갖는 써드 파티 검색 애플리케이션을 실행시키는 것을 포함할 수 있다. 써드 파티 검색 애플리케이션을 실행시키는 것은 쿼리에 대한 써드-파티 포맷 회답을 발생시킬 수 있고, 앞서의 동작들은 쿼리에 대한 검색 결과로서 써드-파티 포맷 회답을 제공하는 것을 포함할 수 있다.
본 시스템은 다음과 같은 특징들 중 하나 이상을 포함할 수 있다. 예를 들어, 써드-파티 포맷 회답은, 써드 파티 검색 애플리케이션과 관련된 웹사이트(website)에 대한 딥 링크를 포함할 수 있고, 그리고/또는 쿼리 요청자에 의해 선택될 때 써드-파티 포맷 회답의 불허(disapproval)를 표시하는 링크를 포함할 수 있다. 또 하나의 다른 예로서, 쿼리가 써드 파티 검색 애플리케이션을 트리거시킴을 결정하는 것은, 쿼리가 대명사(pronoun)를 포함함을 결정하는 것과; 그리고 쿼리 내의 대명사를 쿼리의 쿼리 요청자에 의해 제출된 이전의 쿼리로부터의 명사(noun)로 대체(substitute)하는 것을 포함할 수 있다.
또 하나의 다른 예로서, 본 시스템은 문서 코퍼스 내의 문서들에 대한 역 인덱스를 포함할 수 있고, 앞서의 동작들은 또한, 역 인덱스로부터 쿼리에 대한 제 1 회답들을 발생시키는 것과, 그리고 검색 결과로서 써드-파티 포맷 회답과 함께 제 1 회답들을 제공하는 것을 포함할 수 있다. 일부 구현예들에서, 써드-파티 포맷 회답은 제 1 회답들에 비해 눈에 띄는 위치에 제공될 수 있다. 일부 구현예들에서, 쿼리가 써드 파티 검색 애플리케이션을 트리거시킴을 결정하는 것은, 써드 파티 검색 애플리케이션과 관련된 웹사이트가 제 1 회답들에서 나타남을 결정하는 것을 포함할 수 있다. 일부 구현예들에서, 웹사이트가 제 1 회답들에서 나타남을 결정하는 것은, 웹사이트에 대한 순위 신호(ranking signal)가 신호 임계치(signal threshold)를 충족시키는 것에 의존할 수 있다.
본 개시내용의 또 하나의 다른 실시형태는 컴퓨터-판독가능 매체 상에서 구현될 수 있으며, 이러한 컴퓨터-판독가능 매체 상에는 컴퓨터 시스템의 프로세서에 의해 실행될 때 컴퓨터 시스템으로 하여금 본 명세서에서 개시되는 방법들 중 임의의 방법을 수행하도록 하는 명령들이 기록 및 수록된다.
본 명세서에서 설명되는 주된 내용의 구현예들 중 하나 이상의 구현예는 다음과 같은 장점들 중 하나 이상의 장점을 실현하도록 구현될 수 있다. 하나의 예로서, 써드 파티 검색 애플리케이션들은 웹 쿼리에 직접적으로 회답하는 다수의 추가적인 회답들을 제공할 수 있는바, 이것은 쿼리 요청자들에게 더 풍부한 검색 경험을 제공하게 된다. 추가적으로, 써드 파티 쿼리 응답들은 스니펫 포맷이 아닌 자연 언어 포맷으로 기입(write)될 수 있는바, 이것은 쿼리 요청자가 회답을 더 쉽게 이해할 수 있도록 한다. 자연 언어 회답들은 예를 들어, 문장 포맷, 단락 포맷 및/또는 리스트 포맷의 완성된 사상(complete thought)을 형성하는 회답들이다. 회답들은 또한, 써드 파티 연계 사이트에 대한 딥 링크를 제공할 수 있고, 이것은 쿼리 요청자가 더 직접적으로 추가적인 정보를 획득할 수 있도록 한다. 써드 파티 검색 애플리케이션들에 의해 제공되는 회답들은 품질이 높은데, 왜냐하면 이들은 쿼리에 잘 맞도록 구성되었기 때문이다. 검색 엔진은 요청자에 대한 회답의 유용성을 모니터링함으로써 그리고/또는 써드 파티에 의해 운용되는 사이트의 쿼리에 대한 관련성을 모니터링함으로써 이러한 회답들의 품질을 보장할 수 있다. 일부 구현예들에서, 써드 파티들에 의해 제공되는 회답들은 스니펫-타입 검색 결과들 이전에 포함될 수 있는바, 이것은 텍스트-대-음성 기술(text-to-speech technology)을 사용하여 사용자가 회답들을 판독하는 것 혹은 그 위치를 찾는 것을 쉽게 함과 아울러 직관적이게 할 수 있다.
또 하나의 다른 예로서, 본 시스템은 대규모로 스케일링되는데, 왜냐하면 써드 파티들은 검색 엔진의 인간 운영자들과 협상을 해야만 하는 과정 없이 자동으로 써드 파티 검색 애플리케이션을 개시시킬 수 있기 때문이다. 써드 파티 검색 애플리케이션들에 의해 제공되는 회답들은 최소 지연으로, 예를 들어 20 ms 미만의 지연으로 제공될 수 있는데, 왜냐하면 회답들은 써드-파티 사이트들이 아닌 검색 시스템에서 발생되기 때문이다. 써드 파티는 업데이트 데이터가 검색 애플리케이션에 얼마나 자주 제공될 것인지를 제어할 수 있고, 이에 따라 이들의 검색 애플리케이션들에 의해 발생되는 회답들의 신선도(freshness)를 제어할 수 있다. 마지막으로, 본 시스템은 써드 파티 애플리케이션들이 샌드박싱을 통해 검색 엔진 프로세스들에 부정적 영향을 미치지 않도록 보장할 수 있으며, 쿼리 요청자들이 도움이 되지 않는 것으로 판단하거나 혹은 리소스들에 부정적 영향을 미치게 되는 그러한 써드 파티 검색 애플리케이션들을 제거 또는 비활성화시킬 수 있다.
하나 이상의 구현예들에 관한 세부사항들이 아래의 설명 및 첨부되는 도면들에서 제시된다. 다른 특징들은 이러한 설명 및 도면으로부터, 그리고 청구항들로부터 명백하게 될 것이다.
도 1은 일부 구현예들에 따른, 예시적인 시스템을 나타낸다.
도 2는 본 명세서에서 개시되는 구현예들과 일관되는, 써드 파티 검색 애플리케이션을 어셈블링하기 위한 인터페이스의 예를 나타낸다.
도 3은 본 명세서에서 개시되는 구현예들과 일관되는, 써드 파티 검색 애플리케이션에 의해 발생되는 쿼리 회답을 디스플레이하는 사용자 인터페이스의 예를 나타낸다.
도 4는 본 명세서에서 개시되는 구현예들과 일관되는, 써드 파티 검색 애플리케이션들로부터의 회답들로 강화된 검색 결과들을 제공하기 위한 예시적인 프로세스(400)의 흐름도를 나타낸다.
도 5는 본 명세서에서 개시되는 구현예들과 일관되는, 써드 파티 검색 애플리케이션을 어셈블링하기 위한 예시적인 프로세스의 흐름도를 나타낸다.
도 6은 본 명세서에서 개시되는 구현예들과 일관되는, 쿼리 시간에 쿼리 회답을 제공하기 위해 써드 파티 검색 애플리케이션을 사용하기 위한 예시적인 프로세스의 흐름도를 나타낸다.
도 7은 본 명세서에서 설명되는 기법들을 구현하기 위해 사용될 수 있는 컴퓨터 디바이스의 예를 보여준다.
도 8은 본 명세서에서 설명되는 기법들을 구현하기 위해 사용될 수 있는 분산형 컴퓨터 디바이스의 예를 보여준다.
다양한 도면들에서 유사한 참조 기호들은 유사한 요소들을 표시한다.
도 1은 예시적인 구현예에 따른 시스템(100)의 블록도이다. 시스템(100)은 검색 엔진을 구현하기 위해 사용될 수 있는데, 여기서 검색 엔진은 특정 쿼리들에 대해 자연 언어 회답들을 제공하는 써드 파티 검색 애플리케이션들을 포함한다. 도 1에 제시되는 시스템(100)은 인터넷을 통해 이용가능한 소스들을 검색할 수 있을 뿐만 아니라 검색 엔진에 대해 종래에는 이용가능하지 않았던 써드 파티들에 의해 제공되는 데이터를 검색할 수 있는 시스템으로서 설명된다. 시스템은, 검색 애플리케이션을 생성하는 프로세스를 통해 써드 파티들을 가이딩(guiding)하는 인터페이스와; 샌드박스(이러한 샌드박스 내에서 타겟팅 쿼리들(targeted queries)에 응답하여 써드 파티 검색 애플리케이션들이 실행되게 됨)와; 그리고 적절한 쿼리들에 응답하여 써드 파티 검색 애플리케이션들을 개시시키는 쿼리 엔진을 제공할 수 있다. 본 명세서에서 설명되는 기술의 다른 구성들 및 응용들이 사용될 수 있다. 예를 들어, 시스템은, 인트라넷들, 도서관들, 혹은 다른 문서 보관소들과 같은 하나 이상의 코퍼스들로부터의 검색 결과들을 포함할 수 있다.
검색 시스템(100)은 클라이언트 디바이스(180)로부터 쿼리들(182)을 수신할 수 있고, 쿼리들에 응답하여 검색 결과들(184)을 리턴(return)할 수 있다. 각각의 쿼리(182)는 정보에 대한 요청이다. 쿼리(182)는 예를 들어, 텍스트(text), 오디오(audio), 이미지들(images), 혹은 스크롤 커맨드들(scroll commands)일 수 있다. 시스템(100)은 쿼리 엔진(110), 써드-파티 검색 사용자 인터페이스(User Interface, UI)(114), 그리고 하나 이상의 써드-파티 검색 애플리케이션들(116)을 포함할 수 있다. 시스템(100)은 다수의 상이한 디바이스들의 형태를 취할 수 있는 컴퓨팅 디바이스일 수 있는바, 예를 들어, 표준 서버, 이러한 서버들의 그룹, 혹은 랙 서버 시스템(rack server system)일 수 있다. 일부 구현예들에서, 써드-파티 검색 애플리케이션들(116), 써드-파티 검색 UI(114), 및 쿼리 엔진(110)은 각각 별개의 컴퓨팅 디바이스일 수 있으며, 혹은 이들은 프로세서들 및 메모리들과 같은 컴포넌트들을 공유할 수 있다. 예를 들어, 써드-파티 검색 UI(114) 및 쿼리 엔진(110)은 개인용 컴퓨터, 예를 들어, 랩탑 컴퓨터(laptop computer) 내에서 구현될 수 있다. 일부 구현예들에서, 써드-파티 검색 UI(114) 및 쿼리 엔진(110)은 서버들의 그룹과 같은 일련의 컴퓨팅 디바이스들에서 구현되는 분산형 시스템들일 수 있다. 시스템(100)은 도 8에서 도시되는 바와 같은 컴퓨터 디바이스(800)의 예일 수 있다.
검색 시스템(100)은 쿼리 엔진(110)을 포함할 수 있다. 쿼리 엔진(110)은 쿼리(182)와 같은 검색 쿼리에 응답하여, 크롤링된 문서들(120), 데이터 그래프(124), 혹은 다른 코퍼스들을 검색할 수 있다. 예를 들어, 쿼리 엔진(110)은 데이터 그래프(124)에 추가하여, 크롤링된 문서들(120), 그리고/또는 어떤 다른 인덱스를 검색할 수 있다. 크롤링된 문서들(120)은 문서들의 코퍼스 내에서 용어들 혹은 어구들을 탐색하기 위한 인덱스를 포함할 수 있다. 일부 구현예들에서, 코퍼스는 인터넷 상에서 이용가능한 문서들일 수 있다. 크롤링된 문서들(120) 내의 문서들은 임의 타입의 파일을 포함할 수 있는바, 이러한 임의 타입의 파일은 사운드 파일들(sound files), 비디오 파일들(video files), 텍스트 문서들(text documents), 소스 코드(source code), 뉴스 기사들, 블로그들(blogs), 웹 페이지들, PDF 문서들, 스프레드시트들(spreadsheets) 등과 같은 콘텐츠를 저장한다. 일부 구현예들에서, 크롤링된 문서들(120)은 1-차원 포스팅 리스트(posting list)들을 저장할 수 있는데, 여기서 포스팅 리스트들은 어구들, 용어들, 혹은 문서 특성들을 포스팅 리스트 값들로서 포함하고, 그리고 각각의 포스팅 리스트 값에 대해서 해당 어구 혹은 용어와 관련된 문서들에 대한 식별자들을 포함한다. 포스팅 리스트들은 또한 추가적인 정보를 포함할 수 있다. 크롤링된 문서들(120)에 대한 인덱스가 포스팅 리스트들을 사용하는 것으로서 설명되었지만, 인덱스는 어떤 다른 알려져 있는 혹은 이후에 개발되는 포맷을 가질 수 있다.
시스템(100)은 또한, 데이터 그래프(124)와 같은 다른 검색가능한 코퍼스들을 포함할 수 있다. 데이터 그래프(124)와 같은 그래프-기반 데이터 저장체는 노드(node)들 및 에지(edge)들의 형태로 정보를 저장하는 데이터 그래프이며, 여기서 노드들은 에지들에 의해 연결된다. 데이터 그래프 내의 노드는 사람, 장소, 아이템(item), 아이디어(idea), 토픽(topic), 추상적 개념(abstract concept), 구체적 요소(concrete element), 다른 적절한 것, 혹은 이들의 임의의 조합과 같은 엔티티를 나타낼 수 있다. 그래프 내의 엔티티들은 에지들에 의해 서로 관련될 수 있고, 이것은 엔티티들 간의 관계들을 나타낼 수 있다. 예를 들어, 데이터 그래프는 조지 워싱턴(George Washington)에 대응하는 엔티티를 가질 수 있고, 데이터 그래프는 조지 워싱턴 엔티티와 미국 대통령 엔티티와 군 장성 엔티티 간의 직업 관계(profession relationship)를 가질 수 있다. 인덱싱 엔진은 쿼리 엔진(110)으로 하여금 데이터 그래프를 검색하는 것, 예를 들어, 엔티티들을 찾는 것, 그래프 내의 하나 이상의 관계들 혹은 경로들에 의해 다른 엔티티들과 관련된 엔티티들을 찾는 것 등을 행할 수 있도록 그래프-기반 데이터 저장체(124)를 유지할 수 있다. 그래프-기반 데이터 저장체(124)는 데이터 저장체로부터 데이터를 탐색 및 검색하기 위한 인덱스 혹은 어떤 다른 방법을 포함할 수 있다. 일부 구현예들에서, 데이터 그래프 내의 엔티티들 중 일부는 텍스트-기반 검색을 통해 엔티티의 위치를 찾는 것을 용이하게 하는 속성들을 가질 수 있다. 일부 구현예들에서, 특별한 엔티티들은 텍스트-기반 검색을 용이하게 할 수 있다.
쿼리 엔진(110)은 또한 하나 이상의 써드 파티 검색 애플리케이션들(116)을 개시시킬 수 있는바, 써드 파티 검색 애플리케이션들(116) 각각은 자기 자신의 샌드박스 내에서 개시될 수 있다. 써드 파티는 검색 시스템을 제어하지 않는 혹은 검색 시스템에게 지시(direct)하지 않는 임의의 파티이다. 예를 들어, 써드 파티는 웹 사이트 소유자일 수 있다. 써드 파티 검색 애플리케이션을 개시시키기 위해, 쿼리 엔진(110)은 쿼리(182)를 하나 이상의 쿼리 템플릿들(126)에 상관(correlate)시킬 수 있다. 쿼리 템플릿(126)은 써드 파티 검색 애플리케이션과 관련된 정규 표현 혹은 다른 템플릿일 수 있는바, 여기에 대비되어 쿼리(182)가 평가된다. 만약 쿼리 엔진(110)이 쿼리(182)가 특정 쿼리 템플릿(126)에 상관되어 있음을 발견한다면, 쿼리 엔진은 그 특정 쿼리 템플릿(126)과 관련되어 있는 써드 파티 검색 애플리케이션을 호출(invoke)할 수 있다.
써드 파티 검색 애플리케이션(116)은 샌드박싱 환경에 저장될 수 있다. 샌드박싱 환경은 애플리케이션이 액세스하는 리소스들을 제한하고, 그리고/또는 애플리케이션이 수행할 수 있는 기능들을 제한한다. 써드 파티 검색 애플리케이션(116)은 하나 이상의 쿼리 템플릿들(126)과; 쿼리 혹은 쿼리의 콘텍스트로부터 도출된 하나 이상의 파라미터들(136)과; 그리고 파라미터로부터 쿼리 회답을 발생시키기 위한 명령들(132)을 포함할 수 있다. 예를 들어, 명령들(132)은 파라미터(136)에 관하여 수행된 계산일 수 있고, 계산의 결과가 쿼리 회답이다. 명령들은 또한 쿼리 회답을 위한 포맷을 포함할 수 있다. 예를 들어, 명령들은 파라미터가 화씨(Fahrenheit)로부터 섭씨(Celsius)로 변환돼야할 온도임을 표시할 수 있고, 명령들은 문장으로 쿼리 회답을 제공할 수 있는바, 예를 들어, "화씨 $1은 섭씨 $2와 같습니다"와 같은 문장으로 쿼리 회답을 제공할 수 있는데, 여기서 변수 $1은 쿼리 파라미터로 대체되고, $2는 쿼리 파라미터에 관해 수행된 계산의 결과이다. 일부 구현예들에서, 명령들(132)은 검색 시스템에 의해 제공되는 디폴트 명령들(default instructions)일 수 있다. 일부 써드-파티 검색 애플리케이션들은 또한 써드 파티에 의해 제공되는 데이터 저장체(134)를 포함할 수 있다. 데이터 저장체(134)는 스프레드시트 포맷(spreadsheet format), 데이터 베이스 포맷(data base format), 구획-파일 포맷(delimited-file format), 확장성 마크업 언어(eXtensible Markup Language, XML) 파일, 혹은 (데이터 저장체 내의 특정 데이터가 식별 및 액세스될 수 있도록 하는) 임의의 다른 포맷으로 존재할 수 있다. 만약 데이터 저장체(134)가 제공된다면, 다른 데이터 조작 명령들 및 쿼리 회답 포맷에 추가하여 명령들(132)은 파라미터를 사용하여 데이터 저장체(134)에 액세스하기 위한 명령들을 포함할 수 있다. 데이터 저장체(134)는 예를 들어, 써드 파티 사이트, 써드 파티 디바이스(185)로부터 업로드(upload)될 수 있거나, 혹은 데이터는 검색 시스템과 공유된 메모리에서 저장될 수 있다.
써드 파티는 써드 파티 검색 UI(114)를 통해 검색 시스템(100)과 상호작용할 수 있다. 써드 파티 검색 UI(114)는 하나 이상의 컴퓨팅 디바이스들을 포함할 수 있고, 이들 컴퓨팅 디바이스들은 머신 실행가능 명령들, 또는 여러 개의 소프트웨어, 펌웨어 혹은 이들의 조합을 실행하도록 구성된 하나 이상의 프로세서들을 포함한다. 써드-파티 검색 UI(114)는 쿼리 엔진(110)과 컴퓨팅 디바이스 혹은 디바이스들을 공유할 수 있고, 혹은 하나 이상의 개별 컴퓨팅 디바이스들을 사용하여 동작할 수 있다. 써드 파티 검색 UI(114)는 쿼리 템플릿들(126) 혹은 트리거들의 생성, 파라미터(136) 정의들, 데이터 저장체(134)를 업로드하는 것 및 정의하는 것, 그리고 명령들(132)을 생성하는 것을 용이하게 할 수 있다. 일부 구현예들에서, 써드 파티는 명령들을 제공하지 못할 수 있고, 하지만 검색 시스템(100)의 운용자에 의해 제공되는 명령들의 미리정의된 세트로부터 선택을 할 수 있다. 일부 구현예들에서, 써드 파티는 명령들(132)로서 컴퓨터 코드를 제공할 수 있다. 일부 구현예들에서, 컴퓨터 코드에서 사용되는 기능들은 제한될 수 있다. 일부 구현예들에서, 검색 시스템(100)의 운용자는 선택에 따라서는 써드 파티에 의해 제공되는 코드를 검토(review)할 수 있다.
도 2는 써드 파티 검색 UI(114)에 의해 발생되는 사용자 인터페이스(200)의 예를 나타낸다. 사용자 인터페이스(200)는 어떤 타입의 쿼리들(182)이 검색 애플리케이션을 트리거 혹은 개시시키는지를 결정하기 위해 써드 파티를 활성화시킬 수 있다. 당연한 것으로, 검색 시스템(100)은 비인증된 파티들에 의해 써드 파티 검색 애플리케이션이 액세스 및 수정될 수 없도록 보장하기 위해 사용자 인터페이스(200)를 프리젠테이션(presentation)하기 전에 임의의 알려져 있는 혹은 이후에 개발되는 인증 기법들을 사용하여 써드 파티를 인증할 수 있다. 사용자 인터페이스(200)는 써드 파티 검색 애플리케이션에 대한 식별자(205)를 포함할 수 있는데, 이러한 식별자(205)는 해당 써드 파티 검색 애플리케이션을 다른 써드 파티 검색 애플리케이션들과 구분시킨다. 사용자 인터페이스(200)는 또한 사이트 식별자(210)를 포함할 수 있다. 사이트 식별자(210)는 쿼리 시간에 쿼리 요청자에 대한 쿼리 회답의 소스를 식별시키기 위해 사용될 수 있다. 사이트 식별자(210)는 써드 파티와 관련되어 있거나 혹은 써드 파티에 의해 운용되는 웹사이트일 수 있다. 사이트 식별자(210)는 또한, 써드 파티 검색 애플리케이션이 높은 품질의 회답들을 제공하도록 보장하는 품질 보증 수단으로서 동작할 수 있다. 예를 들어, 일부 구현예들에서, 써드 파티가 검색 애플리케이션을 생성한 이후에, 검색 시스템(100)은, 쿼리에 응답하여 인덱싱 문서들의 코퍼스로부터 발생된 쿼리 회답들에서 사이트 식별자(210)가 나타나는지를 결정하기 위해, 그 제공된 쿼리 템플릿과 매칭되는 테스트 쿼리를 실행시킬 수 있다. 만약 어떠한 회답도 사이트 식별자(210)와 관련되어 있지 않다면, 혹은 사이트 식별자(210)와 관련된 회답의 순위 신호가 신호 임계치를 충족시키지 못한다면, 검색 시스템(100)은 써드 파티 검색 애플리케이션을 비활성화시킬 수 있다. 일부 구현예들에서, 검색 시스템은 또한, 써드 파티 검색 애플리케이션에 의해 제공되는 회답들의 품질이 유지되도록 보장하기 위해, 쿼리들이 제출된 이후 쿼리 시간에 써드 파티 검색 애플리케이션을 트리거시키기 전에, 이러한 점검(check)을 수행할 수 있다.
사용자 인터페이스(200)는 또한 쿼리 템플릿(215) 혹은 쿼리 트리거를 포함할 수 있다. 쿼리 템플릿은 쿼리에 의해 제공되는 파라미터 값에 대응하는 하나 이상의 가변 부분들(217)을 갖는 정규 표현일 수 있다. 가변 부분(217)은 쿼리로부터의 하나 이상의 단어들 혹은 용어들을 나타낼 수 있거나 혹은 이러한 단어들 혹은 용어들에 대응할 수 있다. 정규 표현은 임의의 주어진 패턴의 텍스트 자료를 식별시키기 위해 사용되는 일련의 텍스트 문자들이다. 예를 들어, "$목적지는 얼마나 멀리 있나요"의 정규 표현은 "뉴욕은 얼마나 멀리 있나요", "시드니는 얼마나 멀리 있나요", 혹은 "워싱턴 D.C.는 얼마나 멀리 있나요"의 쿼리와 매칭되거나 혹은 이에 대응할 수 있지만, "새는 얼마나 멀리 날아갈 수 있나요"와는 매칭되지 않을 수 있다. 써드 파티는 수 개의 트리거들(215)을 동일한 검색 애플리케이션과 관련시킬 수 있다. 예를 들어, 도 2에서 예시되는 바와 같이, 각각의 트리거는 동일한 질문을 묻고 있는 상이한 방식을 나타낼 수 있다. 일부 구현예들에서, 검색 시스템은 쿼리 템플릿을 써드 파티에게 제안할 수 있다. 예를 들어, 검색 시스템은 사이트 식별자(210)를 포함하는 과거의 쿼리 회답들을 결정하기 위해, 그리고 그 회답들을 유발시킨 쿼리들에 대한 패턴이 존재하는지 여부를 결정하기 위해, 그리고 만약 존재한다면 그 패턴을 잠재적 트리거로서 제공하기 위해, 검색 기록들(122)을 사용할 수 있다. 쿼리 템플릿들은 쿼리 요청자가 사용할 수 있는 자연 언어 쿼리들을 반영할 수 있다. 자연 언어 쿼리는 임의의 사람이 또 하나의 다른 사람과 대화하면서 질문을 하기 위해 사용하게 되는 그러한 포맷을 갖는 쿼리이며, 키워드(keyword)들에 초점이 맞춰진 것이 아니고, 콘텍스트를 포함할 수 있다.
사용자 인터페이스(200)는 또한 파라미터들 및 이들의 속성들을 정의하는 방식을 포함할 수 있다. 파라미터들은 쿼리의 콘텐츠로부터 나올 수 있거나, 혹은 쿼리 자체로부터 나올 수 있다. 쿼리의 콘텍스트는 쿼리에 대한 위치, 쿼리에 대한 날짜/시간, 쿼리 요청자에 의해 사용되는 브라우저(browser) 혹은 오퍼레이팅 시스템(operating system) 등을 포함할 수 있다. 써드 파티는 쿼리 회답을 결정할 때 사용하기 위해 이러한 파라미터들 중 하나 이상을 선택할 수 있다. 예를 들어, 사용자 인터페이스(200)는 선택 아이콘(selection icon)(220)을 포함할 수 있는데, 이러한 선택 아이콘(220)은 선택 혹은 채택된 경우 써드 파티가 쿼리 콘텍스트 파라미터들을 사용하고자 함을 표시한다. 당연한 것으로, 드랍-다운 리스트(drop-down list), 복수의 라디오 버튼들(radio buttons), 혹은 어떤 다른 선택 방법과 같은 다른 선택 방법들이 사용될 수 있다. 쿼리로부터 나오는 파라미터들에 대해, 사용자 인터페이스(200)는 써드 파티로 하여금 명칭 및 타입과 같은 파라미터 속성들을 입력하도록 할 수 있다. 이에 따라, 사용자 인터페이스(200)는 파라미터 명칭(225) 속성 및 파라미터 타입(230) 속성을 포함할 수 있다. 파라미터 명칭(225)은 쿼리 템플릿(215)의 가변 부분에 대응한다. 바람직하게는, 써드 파티는 쿼리 템플릿 내의 각각의 가변 부분(217)에 대해 명칭(225) 및 타입(230)을 제공한다. 명칭(225) 및 타입(230)은 파라미터를 정의할 수 있고 이에 따라 파라미터가 써드 파티 검색 애플리케이션의 명령 부분에서 사용 및 참조될 수 있도록 한다. 일부 구현예들에서, 파라미터 명칭(225)은 쿼리 템플릿(215) 내의 대응하는 가변 부분과 매칭된다. 예를 들어, 가변 부분(217)은 "$목적지"이고, 이것은 "목적지"의 명칭(225)과 매칭된다. 파라미터들은 스트링(string), 숫자, 혹은 엔티티의 타입(230)을 가질 수 있다.
엔티티 파라미터는 예를 들어, 데이터 그래프(예컨대, 도 1의 데이터 그래프와 같은 것) 내의 엔티티와 부합하는 파라미터이다. 엔티티 타입을 갖는 파라미터를 써드 파티가 선택하는 경우, 사용자 인터페이스(200)는 써드 파티로 하여금 그 파라미터가 대응하고 있는 엔티티의 타입이 무엇인지를 특정할 수 있도록 하는 파라미터 속성을 제공할 수 있다. 예를 들어, 사용자 인터페이스(200)는 써드 파티로 하여금 엔티티가 사람임, 장소임, 이벤트(event)임, 영화임, 등을 특정하도록 할 수 있다. 그러나, 써드 파티 애플리케이션은 샌드박싱되어 있기 때문에, 써드 파티 애플리케이션은 데이터 그래프에 직접적으로 액세스할 수 없다. 이에 따라, 검색 시스템은 써드 파티 검색 애플리케이션이 특정 파라미터에 대응하는 엔티티 식별자를 요청할 수 있도록 하는 기능 혹은 프로세스를 제공할 수 있다. 리턴된 식별자는 데이터 저장체에 대한 키(key)로서 사용될 수 있다. 특히, 데이터 그래프가 www.Freebase.com에서 이용가능한 프리베이스 데이터 그래프(Freebase data graph)와 같은 공개 소소(public source)에 근거하는 경우 이러한 것이 작동하게 된다.
사용자 인터페이스(200)는 또한, 써드 파티로 하여금 하나 이상의 데이터 저장체들을 제공하도록 할 수 있다. 데이터 저장체들(이것은 또한 데이터 테이블들(data tables)로서 지칭됨)은 스프레드시트들, 구획 리스트들, XML 파일들, 혹은 어떤 다른 포맷일 수 있다. 일부 구현예들에서, 써드 파티는 데이터 저장체를 검색 시스템(100)에 업로드할 수 있다. 일부 구현예들에서, 써드 파티는 클라우드-기반 서버(cloud-based server)와 같은 공유된 위치에 데이터 저장체를 저장할 수 있다. 일부 구현예들에서, 데이터 저장체는 인터넷에 공개된 스프레드시트일 수 있고, 이에 따라 검색 시스템은 이러한 데이터 테이블에 액세스할 수 있게 된다. 여하튼, 써드 파티는 데이터 저장체에 대한 타입(240) 속성, 데이터 저장체에 대한 소스 위치(245) 속성, 그리고 데이터 저장체에 대한 명칭(250) 속성을 제공할 수 있다. 타입(240)은 데이터 저장체의 포맷의 표시일 수 있는데, 예를 들어, 스프레드시트, 구획, XML 등의 표시일 수 있다. 명칭(250)은 데이터 저장체를 식별 및 참조하기 위해 명령들에서 사용되는 식별자일 수 있다. 소스(245)는 수입(import) 혹은 업데이트 목적을 위해 데이터 저장체에 대한 위치를 표시할 수 있다. 데이터 저장체에 액세스하기 위해 사용되는 키 혹은 키들(255)과 같은, 데이터 저장체를 더 정의하는 추가적인 속성들이 또한, 사용자 인터페이스(200) 내에 포함될 수 있다.
일부 구현예들에서, 데이터 저장체의 구조는 데이터 저장체 자체로부터 도출될 수 있다. 예를 들어, 데이터 저장체는 각각의 컬럼(column)의 명칭을 갖는 제 1 로우(row) 혹은 제 1 레코드(record)를 포함할 수 있다. 따라서, 제 1 로우는 데이터 테이블에 대한 컬럼 명칭들을 제공할 수 있다. 일부 구현예들에서, 데이터 테이블의 제 1 컬럼은 데이터 테이블에 대한 고유 키(unique key)일 수 있다. 써드 파티 검색 애플리케이션은 헤더 로우(header row)가 존재하고 제 1 컬럼이 키를 포함하고 있음을 추정할 수 있고, 그리고 데이터를 동적으로 정의하기 위해 이러한 정보를 사용할 수 있다. 당연한 것으로, 데이터 테이블의 레이아웃(layout)을 정의하는 알려지지 않은 혹은 이후에 발견되는 다른 방법들이 사용될 수 있다. 예를 들어, 데이터 테이블은 XML 스키마 정의(XML Schema Definition, XSD) 파일을 갖는 XML 파일일 수 있다. 일부 구현예들에서, 써드 파티는 하나보다 많은 데이터 테이블을 제공할 수 있다. 사용자 인터페이스는 검색 시스템이 데이터 테이블에 액세스하여 데이터 테이블을 판독하기 위해 사용할 수 있는 검증 프로세스를 제공할 수 있다. 예를 들어, 사용자 인터페이스(200)의 검증 링크(CHECK link)(260)는 이러한 프로세스를 제공할 수 있다. 일부 구현예들에서, 데이터 테이블은 선택사항(optional)일 수 있다.
사용자 인터페이스(200)는 또한, 파라미터들을 처리하는 것, 데이터 저장체에 액세스하는 것, 데이터를 조작하는 것, 그리고 쿼리 응답을 제공하는 것을 행하기 위한 명령들을 써드 파티가 제공하는 방식을 제공할 수 있다. 예를 들어, 써드 파티 검색 애플리케이션은 코드 박스(code box)(265)를 제공할 수 있고, 여기서 써드 파티는 쿼리 결과를 발생시키기 위해 파라미터 및 선택에 따라서는 데이터 테이블을 사용하기 위한 명령들을 제공할 수 있다. 명령들은 컴퓨터 언어로 제공될 수 있다. 검색 시스템에 의해 사용되는 언어는 컴퓨터들을 프로그래밍하기 위해 사용되는 임의의 알려져 있는 혹은 이후에 개발되는 언어일 수 있는바, 예를 들어, 파이씬(Python), C++, 자바(Java), 자바스크립트(JavaScript) 등과 같은 범용 언어, 혹은 SQL, KQL 등과 같은 데이터베이스 조작을 목표로 하는 언어일 수 있다. 일부 구현예들에서, 이러한 코드는 써드 파티에 의해 제공될 수 있고, 일부 구현예들에서, 코드는 검색 시스템의 운용자에 의해 제공될 수 있다. 일부 구현예들에서, 검색 시스템은 낮은 레이턴시(latency) 및/또는 엄격한 보안(security) 제약들을 만족시키기 위해 특정 기능들에 관해 제한을 가할 수 있다.
일부 구현예들에서, 코드는 선택적인 것일 수 있으며, 검색 시스템은 데이터 테이블에 관해 명령들의 디폴트 세트를 실행시킬 수 있다. 데이터 테이블이 선택적인 그러한 구현예들에서, 명령들은 템플릿과 매칭되는 쿼리에 대한 회답을 제공하기 위해 파라미터들에 관해 수행되는 계산을 실행시킬 수 있고, 또는 쿼리에 의해 제공되는 파라미터와 제 1 컬럼이 매칭되는 경우 데이터 테이블의 제 2 컬럼이 회답을 제공하는 것을 고려할 수 있다. 명령들은 세 개의 쿼리 회답이 어떻게 포맷되는지를 표시하는 명령(270)을 포함할 수 있다. 명령(270)은 또한, 검색 시스템에 의해 제공되는 디폴트 포맷일 수 있다. 일부 구현예들에서, 명령(270)은 써드 파티의 웹사이트(예를 들어, 사이트(210))에 대한 딥 링크를 포함할 수 있다. 이러한 링크는 쿼리 및 쿼리 콘텍스트로부터 추출되는 파라미터들을 고려할 수 있는바, 이것은 써드 파티 사이트가 요청자로부터 추가적인 정보를 수집함이 없이 쿼리 요청자로 하여금 종래에는 이용가능하지 않았던 페이지(page)에 대한 네비게이팅(navigating)을 할 수 있도록 한다. 당연한 것으로, 써드 파티 검색 애플리케이션은 사용자 인터페이스(200)에서 예시되지 않은 추가적인 요소들을 포함할 수 있다.
도 1을 참조하면, 시스템(100)은 또한 검색 기록들(122)을 포함할 수 있다. 검색 기록들(122)은, 이전에 프로세싱된 쿼리들의 검색 결과들 및 검색 용어들에 관한, 검색 로그들(search logs), 쿼리들로부터 수집된 집합 데이터(aggregated data), 혹은 다른 데이터를 포함할 수 있다. 검색 기록들(122) 내의 특정 데이터는 저장 혹은 사용되기 전에 하나 이상의 방식들로 처리될 수 있고, 이에 따라 개인적으로 식별가능한 정보는 제거되게 된다. 예를 들어, 사용자에 대한 그 어떤 개인적으로 식별가능한 정보도 결정될 수 없도록 사용자의 아이덴티티(identity)는 처리될 수 있고, 또는 사용자의 특정 위치가 결정될 수 없도록 사용자의 지리적 위치는 위치 정보가 획득되는 곳에서 (예를 들어, 도시, ZIP 코드, 혹은 주(state) 레벨로) 일반화될 수 있다. 일부 구현예들에서, 검색 기록들(122)은 검색 결과들(184)을 발생시키는 정상적인 프로세스에서 쿼리 엔진(110)에 의해 발생될 수 있다.
쿼리 엔진(110)은 쿼리들(182)에 대한 검색 결과들(184)을 결정하기 위해 데이터 그래프(124), 써드 파티 검색 애플리케이션들(116), 및/또는 크롤링된 문서들(120)을 사용하는 하나 이상의 컴퓨팅 디바이스들을 포함할 수 있다. 크롤링된 문서들(120)로부터의 검색 결과들은 예를 들어, 종래의 혹은 다른 정보 검색 기법들을 사용하여 결정될 수 있고, 그리고 크롤링된 문서들(120)로부터 발생되는 종래의 스니펫-기반 결과들을 나타낼 수 있다. 하나 이상의 써드 파티 검색 애플리케이션들(116)에 의해 발생되는 검색 결과들은 써드 파티에 의해 포맷된 자연 언어 결과들, 예를 들어, 회답들을 나타낼 수 있다. 쿼리 엔진(110)은 클라이언트(180)와 같은 요청자로부터 쿼리들(182)을 수신하고 검색 결과들(184)을 요청자에게 제공하는 하나 이상의 서버들을 포함할 수 있다. 검색 결과들(184)은 쿼리에 응답하는 문서들로부터의 스니펫 정보와, 그리고 써드 파티 검색 애플리케이션들(116)에 의해 제공되는 하나 이상의 회답들을 포함할 수 있다. 쿼리 엔진(110)은 쿼리가 써드 파티 검색 애플리케이션들(116)을 트리거시키는지 여부를 결정하는 써드 파티 트리거 엔진(112)을 포함할 수 있다. 쿼리 엔진(110)은 순위 엔진(ranking engine)을 포함할 수 있는데, 여기서 순위 엔진은 크롤링된 문서들(120)로부터 쿼리에 응답하는 문서들을 식별하고, 예를 들어, 하나 이상의 순위 신호들을 사용하여 쿼리에 응답하는 문서들 및 써드-파티 포맷 회답들에 대한 점수(score)들을 계산한다. 순위 엔진은 쿼리에 응답하여 발견된 문서들 및 회답들의 순위를 이러한 점수들을 사용하여 정할 수 있다. 일부 구현예들에서, 써드-파티 포맷 회답들은 다른 타입의 회답들보다 앞서는 순위를 가질 수 있다. 일부 구현예들에서, 써드 파티 검색 애플리케이션은 쿼리에 대한 응답들 내에서 회답이 어디에 있는지를 결정하기 위해 순위 엔진이 사용한 관련된 품질 점수를 가질 수 있다.
도 3은 본 명세서에서 개시되는 구현예들과 일관되는, 써드 파티 검색 애플리케이션에 의해 발생되는 쿼리 회답을 디스플레이하는 사용자 인터페이스(300)의 예를 나타낸다. 쿼리 엔진(110)은 "런던은 얼마나 멀리 있나요"의 쿼리(305)에 응답하여 사용자 인터페이스(300)를 생성하기 위해 사용되는 정보를 발생시킬 수 있다. 예를 들어, 써드 파티 트리거 엔진(112)은 수신된 쿼리를 쿼리 템플릿들(126)에 대비하여 평가할 수 있다. 만약 쿼리가 쿼리 템플릿들(126) 중 하나에 대응한다면, 써드 파티 트리거 엔진(112)은 쿼리 템플릿과 부합하는 써드 파티 검색 애플리케이션(116)이 실행되도록 할 수 있다. 써드 파티 검색 애플리케이션(116)은 쿼리 회답을 발생시킬 수 있고, 그리고 이러한 회답을 쿼리 결과에 포함되게 하기 위해 쿼리 엔진(110)에 제공할 수 있다. 예를 들어, 쿼리 요청자가 쿼리(305)를 제출하는 경우, 쿼리 엔진(110)은 임의의 알려져 있는 혹은 이후에 개발되는 기법들을 사용하여 쿼리에 응답하는 문서들에 대해 인덱싱 문서들을 검색할 수 있다. 응답하는 문서들 중 일부로부터의 정보는 스니펫-기반 검색 회답들(320)로서 리턴될 수 있다. 추가적으로, 써드 파티 트리거 엔진(112)은 쿼리 템플릿들(126)에 대비하여 쿼리(305)를 평가할 수 있다. 예를 들어, "$목적지가 얼마나 멀리 있나요"의 쿼리 템플릿은 쿼리(305)와 부합할 수 있다. 쿼리 템플릿이 쿼리와 부합하는 경우, 써드 파티 트리거 엔진(112)은 쿼리 템플릿과 관련된 써드 파티 검색 애플리케이션(116)이 실행되도록 할 수 있다. 써드 파티 검색 애플리케이션(116)은 쿼리(305)에 대한 회답(310)을 발생시키기 위해 가변 부분 혹은 파라미터 부분(본 예에서는 "런던")을 사용할 수 있다. 사용자 인터페이스(300)의 예에서, 써드-파티 포맷 회답(310)은 스니펫-기반 회답들(320)에 비해 눈에 띄는 위치에 프리젠테이션될 수 있다. 일부 구현예들에서, 회답은 딥 링크(325)를 포함할 수 있다. 딥 링크는 회답(310)을 발생시키기 위해 사용되는 파라미터 정보를 포함할 수 있다.
일부 구현예들에서, 사용자 인터페이스(300)는 또한 쿼리 요청자가 회답(310)에 관한 피드백(feedback)을 제공하도록 하는 수단을 포함한다. 예를 들어, 사용자 인터페이스(300)는 쿼리 요청자가 그 제공된 응답에 대한 불만족을 표시할 수 있도록 하는 링크(315)를 포함할 수 있다. 쿼리 엔진(110)은 제공된 회답(310)에 대한 불만족을 추적하는 써드 파티 모니터링 엔진(118)을 포함할 수 있다. 만약 미리결정된 양의 쿼리 요청자들이 회답(310)에 대해 불만족을 표시한다면, 검색 시스템(100)은 해당 응답을 제공한 써드 파티 검색 애플리케이션을 비활성화시키거나 혹은 중지시킬 수 있다. 일부 구현예들에서, 써드 파티 모니터링 엔진(118)은 또한, 각각의 써드 파티 검색 애플리케이션(116)에 대해, 쿼리 요청자들이 써드 파티 검색 애플리케이션에 의해 제공 및 포맷된 회답을 선택함이 없이 스니펫-기반 응답을 선택한 횟수의 양을 추적할 수 있다. 만약 특정 써드 파티 검색 애플리케이션에 대해 이러한 양이 임계치를 충족시킨다면, 검색 시스템(100)은 그 특정 써드 파티 검색 애플리케이션을 비활성화시킬 수 있다. 추가적으로, 써드 파티 모니터링 엔진(118)은 써드 파티 검색 애플리케이션들(116)이 실행됨에 따라 이들을 모니터링할 수 있다. 만약 특정 써드 파티 검색 애플리케이션(116)이 너무 많은 리소스들을 요구한다면, 시스템(100)은 그 특정 써드 파티 검색 애플리케이션(116)을 폐쇄 혹은 제한할 수 있다.
도 1을 참조하면, 데이터 그래프(124), 크롤링된 문서들(120), 쿼리 템플릿들(126), 써드 파티 검색 애플리케이션들(116), 및 검색 기록들(122)은 반-영구적 혹은 비-일시적 형태로 데이터를 저장하도록 구성된 유형의 컴퓨터-판독가능 저장 디바이스들 상에 저장되는바, 예를 들어, 디스크, 플래시, 캐시 메모리, 메인 메모리, 혹은 이들의 조합체 상에 저장된다. 일부 구현예들에서, 데이터 그래프(124), 크롤링된 문서들(120), 쿼리 템플릿들(126), 써드 파티 검색 애플리케이션들(116), 및 검색 기록들(122)은 다양한 메모리들의 조합체 내에 저장될 수 있다.
일부 구현예들에서, 시스템(100)은 인덱싱 엔진(미도시)을 포함할 수 있고, 여기서 인덱싱 엔진은 크롤링된 문서들(120) 및/또는 데이터 그래프(124) 등을 생성 및 유지하기 위해 하나 이상의 머신 실행가능 명령들, 또는 여러 개의 소프트웨어, 펌웨어 혹은 이들의 조합을 실행하도록 구성된 하나 이상의 프로세서들을 포함한다. 인덱싱 엔진은 예를 들어, 하나 이상의 서버들(190)로부터 콘텐츠를 획득할수 있고, 크롤링된 문서들(120) 및/또는 데이터 그래프(124)를 유지하기 위해 이러한 콘텐츠를 사용할 수 있다. 일부 구현예들에서, 서버들(190)은 인덱싱 엔진에 의해 액세스가능한 웹 서버들, 사설 네트워크 상의 서버들, 혹은 다른 문서 소스들일 수 있다.
검색 시스템(100)은 네트워크(160)를 통해 클라이언트(들)(180), 써드 파티 디바이스들(185), 및/또는 서버들(190)과 통신할 수 있다. 네트워크(160)는 예를 들어, 인터넷일 수 있거나, 혹은 네트워크(160)는 유선 혹은 무선 로컬 영역 네트워크(Local Area Network, LAN), 와이드 영역 네트워크(Wide Area Network, WAN), 등일 수 있는바, 이들은 예를 들어, 게이트웨이 디바이스들(gateway devices), 브리지들(bridges), 스위치들(switches) 및/또는 기타 등등을 사용하여 구현된다. 네트워크(160)를 통해, 쿼리 엔진(110)은 클라이언트들(180) 및/또는 써드 파티 디바이스들(185)과 통신할 수 있고, 클라이언트들(180) 및/또는 써드 파티 디바이스들(185)로의/로부터의 데이터를 전송할 수 있다. 예를 들어, 쿼리 엔진(110)은 검색 결과들 혹은 제안된 업데이트들을 클라이언트들(180) 중 하나 이상의 클라이언트에게 전송할 수 있고, 그리고 써드 파티 디바이스(185)로부터 쿼리 템플릿들 혹은 데이터 테이블들을 수신할 수 있다. 클라이언트들(180) 및 써드 파티 디바이스(185)은 도 7의 디바이스(700 혹은 750)와 같은 컴퓨팅 디바이스들을 나타낼 수 있다. 인간 사용자는 검색 시스템(100)과 통신하기 위해 그리고 검색 시스템(100)에 정보 및 데이터(186)를 제공하기 위해 써드 파티 디바이스(185)를 사용할 수 있다.
도 4는 본 명세서에서 개시되는 구현예들과 일관되는, 써드 파티 검색 애플리케이션들로 강화된 검색 결과들을 제공하기 위한 예시적인 프로세스(400)의 흐름도를 나타낸다. 도 1의 검색 시스템(100)과 같은 검색 시스템은, 검색 시스템에 의해 호스팅되는 써드 파티 검색 애플리케이션들을 셋업(set up)하고, 사용하고 그리고 모니터링하기 위해 프로세스(400)를 수행할 수 있다. 도 4에서 예시되는 단계들 중 일부는 선택적인 것일 수 있으며, 구현예들이 각각의 단계를 반드시 수행할 필요는 없고, 또는 구현예들이 이러한 단계들을 상이한 순서로 수행할 수 있음을 이해해야 한다.
프로세스(400)는 검색 시스템이 써드 파티 검색 애플리케이션을 획득 및 어셈블링(assembling)하는 것으로 시작할 수 있다(405). 써드 파티 검색 애플리케이션은 쿼리 템플릿, 파라미터, 파라미터를 사용하여 쿼리 회답을 발생시키기 위한 명령들, 그리고 선택에 따라서는 데이터 테이블을 포함한다. 일부 구현예들에서, 써드 파티 검색 애플리케이션은 또한 써드 파티와 관련된 사이트의 URL을 포함할 수 있다. 검색 시스템은 써드 파티에 의해 제공되는 명칭을 통해, URL을 통해, 검색 시스템에 의해 할당된 식별자를 통해, 혹은 이들의 조합을 통해, 써드 파티 검색 애플리케이션을 식별할 수 있다. 써드 파티는 요소들 중 적어도 일부를 식별하거나 혹은 검색 시스템에 제공할 있으며, 검색 시스템은 이들을 식별자와 관련시킬 수 있고, 그리고 이들을 써드 파티 검색 애플리케이션으로서 저장할 수 있다.
도 5는 본 명세서에서 개시되는 구현예들과 일관되는, 써드 파티 검색 애플리케이션을 어셈블링하기 위한 예시적인 프로세스(500)의 흐름도를 나타낸다. 도 1의 검색 시스템(100)과 같은 검색 시스템은 도 4의 단계(405)의 일부로서 프로세스(500)를 수행할 수 있다. 프로세스(500)는 검색 시스템이 써드 파티에 의해 식별된 하나 이상의 쿼리 템플릿들을 등록(registering)하는 것으로 시작할 수 있다(505). 앞에서 설명된 바와 같이, 쿼리 템플릿은 써드 파티 검색 애플리케이션이 회답들을 제공하는 쿼리들이 어떤 쿼리들인지에 관한 표시일 수 있다. 쿼리 템플릿은 고정 부분 및 가변 부분을 갖는 정규 표현일 수 있다. 예를 들어, 쿼리 템플릿 "$명칭 베이컨 수(bacon number)"는 $명칭에 나타내어지는 가변 부분을 가질 수 있으며, $명칭은 고정 부분인 "베이컨 수"에 선행하는 임의 개수의 문자들 혹은 단어들과 매칭될 수 있다. 예를 들어, 앞서의 쿼리 템플릿은 "리차드 기어(Richard Gere) 베이컨 수", "티위기(Twiggy) 베이컨 수", 그리고 "사라 미셸 겔러(Sarah Michelle Gellar) 베이컨 수"와 부합한다. 가변 부분은 파라미터에 대응할 수 있다. 일부 구현예들에서, 쿼리 템플릿은 가변 부분을 포함하지 않을 수 있다. 예를 들어, "몇 시인가요"의 쿼리 템플릿은 가변 부분을 갖지 않는다. 써드 파티는 예를 들어, 도 2에서 예시되는 사용자 인터페이스(200)를 사용하여 쿼리 템플릿들을 제공할 수 있다. 검색 시스템은 쿼리 템플릿을 등록할 수 있는바, 이러한 등록은 쿼리 템플릿을 써드 파티 검색 애플리케이션과 관련시킴으로써, 그리고 쿼리 엔진에 의해 액세스가능한 메모리 내에 검색 시스템에서의 쿼리 템플릿을 저장함으로써 이루어지고, 이에 따라 검색 시스템은 쿼리 시간에 쿼리에 대비하여 쿼리 템플릿을 평가할 수 있게 된다.
검색 시스템은 써드 파티 검색 애플리케이션에 대해 써드 파티에 의해 식별된 하나 이상의 파라미터들에 대한 정보를 등록할 수 있다(510). 이러한 정보는 파라미터 값에 대한 소스를 포함할 수 있다. 파라미터 값들은 쿼리 콘텍스트로부터 나온 것일 수 있거나 혹은 쿼리 자체로부터 나온 것일 수 있다. 예를 들어, 써드 파티는 쿼리 콘텍스트 파라미터들이 써드 파티 검색 애플리케이션 내에 포함되게 됨을 표시할 수 있다. 이러한 파라미터들은 쿼리 요청자의 위치(예를 들어, 도시, 주, 나라), 쿼리의 날짜 및 시간, 쿼리 요청자에 의해 사용된 브라우저 혹은 오퍼레이팅 시스템 등을 포함한다. 이러한 정보는 또한, 쿼리로부터 도출되는 값들을 갖는 파라미터들에 대한 명칭 및 타입을 포함할 수 있다. 예를 들어, $명칭의 파라미터는 써드 파티에 의해 식별될 수 있고, 그리고 $명칭 파라미터의 값은 쿼리 시간에 쿼리로부터 획득될 수 있다. 도 2에 관하여 앞에서 설명된 바와 같이, 파라미터들은 스트링들, 숫자들, 혹은 엔티티들일 수 있다. 엔티티 파라미터들은 또한, 추가적인 정보를 포함할 수 있는바, 예를 들어, 쿼리로부터 획득된 파라미터에 대한 엔티티 식별자를 결정하거나 혹은 그 위치를 결정하기 위해 사용되는 엔티티 또는 어떤 다른 파일을 포함하는 데이터 그래프와 같은 것을 포함할 수 있다. 써드 파티는 하나 이상의 파라미터들을 식별할 수 있고, 그리고 검색 시스템은, 파라미터들을 써드 파티 검색 애플리케이션에 대한 식별자와 관련시킴으로서, 그리고 검색 시스템에서 파라미터들을 저장함으로써, 파라미터들을 등록할 수 있다.
써드 파티 검색 애플리케이션을 어셈블링하기 위해, 검색 시스템은 또한 하나 이상의 데이터 테이블들을 등록할 수 있다(515). 데이터 테이블들은 쿼리 회답을 발생시키기 위해 사용되는 데이터가 포함된 스프레드시트들일 수 있다. 데이터 테이블들은 또한, 써드 파티로부터의 데이터를 검색 시스템에 제공하는 구획 텍스트 파일들, XML 파일들, 혹은 임의의 다른 방법일 수 있다. 스프레드시트 혹은 구획 텍스트 파일에서, 데이터 테이블의 제 1 로우는 컬럼들을 정의하기 위해 사용될 수 있다. 대안적으로, 검색 시스템은 등록 프로세스의 일부로서 써드 파티로부터 컬럼 정의들을 획득할 수 있는데, 예를 들어, 이러한 정보를 수집하는 사용자 인터페이스를 사용하여 획득할 수 있다. 써드 파티는 도 2의 사용자 인터페이스(200)와 같은 사용자 인터페이스를 통해 데이터 테이블에 대한 정보를 제공할 수 있다. 검색 시스템은, 데이터 테이블을 써드 파티 검색 애플리케이션에 대한 식별자와 관련시킴으로써, 그리고 데이터 테이블을 검색 시스템에서 저장함으로써, 데이터 테이블을 등록할 수 있다. 일부 구현예들에서, 데이터 테이블은 검색 시스템에 의해 액세스가능한 메모리 내에 저장될 수 있다.
써드 파티 검색 애플리케이션을 어셈블링하기 위해서, 검색 시스템은 또한, 쿼리 회답을 발생시키기 위해 파라미터들을 사용하기 위한 명령들을 등록할 수 있다(520). 명령들은 파라미터들을 사용하여 수행된 계산, 데이터 테이블들에 액세스하기 위한 명령들, 그리고 쿼리 회답을 포맷하기 위한 명령들을 포함할 수 있다. 일부 구현예들에서, 써드 파티는 도 2의 사용자 인터페이스(200)와 같은 사용자 인터페이스를 통해 명령들을 제공할 수 있다. 일부 구현예들에서, 검색 시스템은 써드 파티에 대해 이용가능한 명령들의 타입들을 제한할 수 있다. 예를 들어, 써드 파티는 데이터 테이블의 컬럼들 혹은 파라미터들에 관해 수행된 스트링 및 수치 동작들에 제한될 수 있다. 일부 구현예들에서, 검색 시스템은 써드 파티 검색 애플리케이션으로 하여금 데이터 그래프(124)와 같은 또 하나의 다른 데이터 소스로부터 데이터를 획득할 수 있도록 하는 기능들을 제공할 수 있다. 일부 구현예들에서, 써드 파티에 의해 제공되는 명령들은 써드 파티 검색 애플리케이션이 쿼리 엔진에 대해 이용가능하게 되기 전에 검색 시스템의 운용자에게 의해 검증될 수 있다.
일부 구현예들에서, 명령들은 검색 시스템에 의해 제공되는 디폴트 명령들일 수 있다. 예를 들어, 명령들은, 통과 파라미터(passed-in parameter)가 키 값이라고 고려하는 것, 파라미터를 그 표시된 데이터 테이블의 제 1 컬럼에 매칭시키는 것, 그리고 데이터 테이블 내의 제 2 컬럼으로부터의 값 및 쿼리를 포함하는 회답을 발생시키는 것을 행하는 명령들일 수 있다. 회답의 포맷은 "<쿼리>는 <제 2 컬럼>입니다"일 수 있다. 예를 들어, 써드 파티 검색 애플리케이션은 "$cmd를 위한 맥 키보드 단축키(mac keyboard shortcut)"의 쿼리 템플릿을 포함할 수 있고, 제 1 컬럼에 $cmd의 값들을 갖고 제 2 컬럼에 대응하는 단축키들을 갖는 데이터 테이블을 포함할 수 있다. 이러한 써드 파티 검색 애플리케이션에 대해, "강제 종료(force quit)를 위한 맥 키보드 단축키"의 쿼리는 써드 파티 검색 애플리케이션으로 하여금 "강제 종료를 위한 맥 키보드 단축키는 command-option-esc입니다"의 회답을 발생시키도록 할 수 있다.
명령들은 또한, 써드 파티 검색 애플리케이션에 의해 제공되는 쿼리 회답을 포맷하기 위한 명령들을 포함할 수 있다. 쿼리 회답은 쿼리에 대해 직접적으로 회답하는 자연 언어 쿼리 회답일 수 있다. 회답은 문장, 단락, 혹은 스트링, 아이템들의 리스트, 혹은 자연 언어 회답을 포함하는 사전, 회답과 함께 보여지는 딥 링크, 그리고 딥 링크를 위한 앵커 텍스트(anchor text)를 포함할 수 있다. 회답은 회답을 발생시키기 위해 사용된 파라미터 값들을 나타내는 텍스트를 포함할 수 있다. 일부 구현예들에서, 딥 링크는 쿼리 혹은 쿼리 콘텍스트로부터 추출되는 파라미터들을 포함할 수 있다. 딥 링크는 써드 파티에 의한 데이터 수집 없이 종래에는 이용가능하지 않았던 써드 파티의 웹사이트 내의 페이지에 융합될 수 있다. 검색 시스템은, 명령들을 써드 파티 검색 애플리케이션에 대한 식별자와 관련시킴으로써, 그리고 명령들을 검색 시스템에서 저장함으로써, 명령들을 등록할 수 있다.
일부 구현예들에서, 검색 시스템은 쿼리 응답을 발생시킬 때 써드 파티 검색 애플리케이션이 사용을 위해 이용가능하게 되기 전에 써드 파티 검색 애플리케이션을 검증할 수 있다(525). 예를 들어, 검색 시스템은 써드 파티 검색 애플리케이션과 관련된 쿼리 템플릿에 대응하는 쿼리에 대한 검색 결과를 발생시킬 수 있다. 만약 써드 파티 검색 애플리케이션과 관련된 사이트 혹은 URL이 검색 결과 내에서 순위 임계치를 충족시키기 못한다면, 검색 시스템은 써드 파티 검색 애플리케이션을 비활성화시킬 수 있거나, 혹은 써드 파티 검색 애플리케이션이 쿼리 엔진에 대해 이용가능하지 않게 되도록 할 수 있다. 예를 들어, 검색 시스템은 쿼리 엔진이 써드 파티 검색 애플리케이션을 결코 호출하지 못하도록 쿼리 템플릿들을 비활성화시킬 수 있다.
또 하나의 다른 예로서, 검색 시스템은 써드 파티 검색 애플리케이션이 어떤 리소스들을 소비하는지를 결정하기 위해 샌드박싱 환경에서 써드 파티 검색 애플리케이션을 실행시킬 수 있다. 샌드박싱 환경에서, 검색 시스템은 써드 파티 검색 애플리케이션이 어떤 리소스들에 액세스하는지를 엄격하게 제어한다. 예를 들어, 검색 시스템은 써드 파티 애플리케이션이 오로지 써드 파티 검색 애플리케이션과 관련된 데이터 테이블들, 파라미터 정보에만 액세스하도록 그리고 특정 기능들만을 갖도록 보장할 수 있다. 샌드박싱 환경에서 실행되고 있을지라도, 만약 써드 파티 검색 애플리케이션이 너무 많은 리소스들을 소비한다면, 검색 시스템은 써드 파티 검색 애플리케이션을 비활성화시킬 수 있다. 또 하나의 다른 예로서, 만약 써드 파티 검색 애플리케이션이 너무 길게 시간 소비를 하고 있다면, 즉 미리결정된 양의 시간 내에 쿼리 회답을 제공하지 못하고 있다면, 검색 시스템은 써드 파티 검색 애플리케이션을 비활성화시킬 수 있다. 써드 파티 검색 애플리케이션을 검증하는 것은, 검색 시스템 혹은 사용자 경험에 영향을 미침이 없이 써드 파티 검색 애플리케이션이 고-품질 회답들을 제공하도록 보장하기 위해 이러한 수단들 및 다른 수단들을 포함할 수 있다. 일부 구현예들에서, 이러한 검증은 써드 파티가 써드 파티 검색 애플리케이션에 임의의 변경을 행할 때마다 수행될 수 있다. 그 다음에, 프로세스(500)는 써드 파티 검색 애플리케이션을 어셈블링 및 검증하는 것으로 종료된다.
도 4를 참조하면, 적어도 하나의 써드 파티 검색 애플리케이션이 준비되어 있는 경우, 검색 시스템은 쿼리 요청자에 의해 제출된 쿼리에 응답하여 써드 파티 검색 애플리케이션을 호출할 수 있다(410). 호출된 써드 파티 검색 애플리케이션은, 써드 파티 데이터 저장체 내의 값들 및 제공된 파라미터에 따라, 쿼리에 대한 써드-파티 포맷 쿼리 회답을 제공할 수 있거나 혹은 제공하지 않을 수 있다. 검색 시스템은 또한, 쿼리가 하나보다 많은 쿼리 템플릿을 트리거시키는 경우 하나보다 많은 써드 파티 검색 애플리케이션을 호출할 수 있다. 검색 시스템은 도 3에 관하여 앞에서 논의된 바와 같이, 쿼리 요청자에게 제공되는 검색 결과 내에 써드-파티 포맷 회답을 포함시킬 수 있다.
도 6은 본 명세서에서 개시되는 구현예들과 일관되는, 쿼리 시간에 쿼리 회답을 제공하기 위해 써드 파티 검색 애플리케이션을 사용하기 위한 예시적인 프로세스(600)의 흐름도를 나타낸다. 도 1의 검색 시스템(100)과 같은 검색 시스템이 도 4의 단계(410)의 일부로서 프로세스(600)를 수행할 수 있다. 예를 들어, 검색 시스템은 쿼리 요청자로부터 쿼리를 수신할 수 있고, 그리고 인덱싱 문서들을 검색하는 것과, 그리고 쿼리에 대한 스니펫-기반 검색 결과들을 발생시키는 것을 행하는 프로세서에 추가하여, 혹은 이러한 프로세스 대신에 프로세스(600)를 수행할 수 있다. 프로세스(600)는 쿼리가 써드 파티 검색 애플리케이션을 트리거시키는지 여부를 결정함으로써 시작할 수 있다(605). 쿼리가 써드 파티 검색 애플리케이션을 트리거시키는지 여부를 결정하기 위해, 검색 시스템은 써드 파티 검색 애플리케이션에 대한 쿼리 템플릿들에 대비하여 쿼리를 평가할 수 있다. 예를 들어, 검색 시스템은 쿼리의 제 1 부분이 쿼리 템플릿의 비-가변 부분과 매칭되는지 여부를 결정할 수 있다(이 경우 제 2 부분은 쿼리 템플릿의 가변 부분이 있다면 여기에 대응하고 있는 상태임). 일부 구현예들에서, 만약 쿼리가 쿼리 템플릿의 비-가변 부분과 매칭되거나 혹은 이러한 비-가변 부분에 대응한다면, 쿼리는 써드 파티 검색 애플리케이션을 트리거시킬 수 있다. 또 하나의 다른 예로서, 검색 시스템은 쿼리가 써드 파티 검색 애플리케이션을 트리거시키는지 여부를 결정하기 위해 이전의 쿼리들의 콘텍스트를 고려하여 쿼리에 관한 자연 언어 프로세싱 및 감정 분석을 포함할 수 있다. 예를 들어, 만약 요청자에 대한 이전의 쿼리가 "뉴욕에서의 날씨는 어떤가요"이였고, 현재의 쿼리가 "그곳에서 런던까지는 얼마나 먼가요"라면, 검색 시스템은 쿼리가 쿼리 템플릿들에 대응하는지 여부를 결정하기 전에, 대명사 "그곳"에 대해 어떤 도시를 사용할 것인지를 결정하기 위해 이전의 쿼리를 사용할 수 있고 쿼리 내의 "그곳"을 "뉴욕"으로 대체할 수 있다. 또 하나의 다른 예로서, 만약 쿼리가 "내일 영화 시간"이라면, 검색 시스템은 쿼리 내의 "내일"을 날짜로 대체할 수 있다.
일부 구현예들에서, 검색 시스템은 선택에 따라서는 써드 파티 검색 애플리케이션을 트리거시키기 전에 추가적인 점검을 수행할 수 있다. 예를 들어, 검색 시스템은 써드 파티 검색 애플리케이션과 관련된 사이트가 쿼리에 응답하여 인덱싱 문서들의 검색으로부터 발생된 검색 결과 내에 나타남을 검증할 수 있다. 이것은 써드 파티 검색 애플리케이션이 쿼리의 주된 내용과 밀접하게 관련되도록 보장할 수 있다. 일부 구현예들에서, 이것은 사이트에 대한 혹은 써드 파티 검색 애플리케이션에 대한 순위 신호가 임계치 아래에 있을 때만 수행될 수 있다. 만약 사이트가 검색 결과 내에 나타난다면, 쿼리는 써드 파티 검색 애플리케이션을 트리거시킨다. 이러한 일부 구현예들에서, 사이트가 검색 결과 내에서 최소 순위 신호를 갖지 않는다면 쿼리는 써드 파티 검색 애플리케이션을 트리거시키지 않는다.
만약 쿼리가 써드 파티 검색 애플리케이션을 트리거시키지 않는다면(605, 아니오), 프로세스(600)는 써드-파티 포맷 쿼리 회답을 제공함이 없이 종료된다. 그러나, 만약 쿼리가 써드 파티 검색 애플리케이션을 트리거시킨다면(605, 예), 검색 시스템은 쿼리로부터 관련 파라미터들을 추출할 수 있다(610). 파라미터들은 쿼리 템플릿의 가변 부분을 사용하여 추출될 수 있다. 예를 들어, 쿼리 템플릿의 가변 부분에 대응하는 쿼리의 제 2 부분이 추출될 수 있고, 쿼리 템플릿의 가변 부분에서 식별된 파라미터의 값으로서 사용될 수 있다. 검색 시스템은 또한 쿼리의 콘텍스트로터 관련 파라미터들을 추출할 수 있다(615). 이러한 파라미터들은 도 2의 아이템(220)에 관하여 앞에서 논의된 바와 같이, 만약 써드 파티가 써드 파티 검색 애플리케이션 내에서 이러한 파라미터들을 사용하고자 한다면 추출될 수 있다. 그 다음에 검색 시스템은 써드 파티 검색 시스템을 호출할 수 있고 임의의 추출된 파라미터들을 써드 파티 검색 애플리케이션에 전달할 수 있다(620). 검색 시스템은, 써드 파티 검색 애플리케이션에 대해 이용가능한 리소스들을 제한하기 위해, 그리고 써드 파티 검색 애플리케이션이 검색 시스템에 부정적 영향을 미치지 않도록 하기 위해, 샌드박싱 환경에서 써드 파티 검색 애플리케이션을 실행시킬 수 있다. 써드 파티 검색 애플리케이션은 검색 시스템에서 호스팅되고 실행되는바, 이는 써드 파티에 의해 호스팅되는 사이트 혹은 서버와의 통신이 필요 없도록 한다. 이것은 쿼리 레이턴시를 감소시키고, 검색 시스템으로 하여금 써드 파티 검색 애플리케이션에 의해 수행되는 동작들을 더 엄격하게 제어할 수 있게 한다.
검색 시스템은 써드 파티 검색 애플리케이션이 응답을 제공하는지 여부를 결정할 수 있다(625). 예를 들어, 써드 파티 검색 애플리케이션은 블랭크(blank) 혹은 널 스트링(NULL string)을 리턴할 수 있고, 이것은 어떠한 회답도 발생되지 않았음을 표시한다. 또한, 만약 써드 파티 검색 애플리케이션이 제한 시간 내에 회답을 제공하는데 실패했다면, 검색 시스템은 대기하지 않을 수 있으며 어떠한 회답도 제공되지 않을 것임을 결정할 수 있다. 만약 써드 파티 검색 애플리케이션이 응답을 제공한다면(625, 예), 검색 시스템은 쿼리 요청자에 대한 검색 결과의 일부로서 회답을 제공할 수 있다(630). 앞에서 논의된 바와 같이, 회답은 써드 파티 검색 애플리케이션에 의해 포맷되고 제공되는 자연 언어 회답이다.
만약 검색 시스템이 써드 파티 검색 애플리케이션이 회답을 제공하지 않음을 결정한다면(625, 아니오), 프로세스(600)는 종료되고, 어떠한 써드-파티 포맷 쿼리 회답도 검색 결과에 추가되지 않는다. 당연한 것으로, 검색 시스템은 복수의 써드 파티 검색 애플리케이션들에 대해 동시에 혹은 순차적으로 프로세스(600)를 반복할 수 있다. 달리 말하면, 검색 시스템은 만약 쿼리가 하나보다 많은 써드 파티 검색 애플리케이션들을 트리거시킨다면 복수의 써드 파티 검색 애플리케이션들로부터 하나보다 많은 써드-파티 포맷 쿼리 회답을 제공할 수 있다. 다양한 써드 파티 검색 애플리케이션들이 동시에 호출될 수 있거나, 차례로 호출될 수 있거나, 혹은 이들의 어떤 조합으로 호출될 수 있다.
도 4를 되돌아가서, 일부 구현예들에서, 검색 시스템은 또한, 인기없는 회답들 혹은 품질이 낮은 회답들을 제거하기 위해 써드 파티 검색 애플리케이션들에 의해 제공되는 회답들과 쿼리 요청자 간의 상호작용을 모니터링할 수 있다(415). 예를 들어, 검색 시스템은 쿼리 요청자가 써드 파티 검색 애플리케이션에 의해 제공되는 회답보다 덜 눈에 띄는 위치들에서 응답들을 선택하는지 여부를 결정할 수 있다. 검색 시스템은 이러한 것이 일어나는 횟수를 추적할 수 있고, 만약 그 횟수가 임계치를 충족시킨다면, 써드 파티 검색 애플리케이션에 의해 제공되는 회답들의 순위를 감소시키는 것, 써드 파티 검색 애플리케이션과 관련된 사이트의 순위를 감소시키는 것, 써드 파티 검색 애플리케이션을 비활성화시키는 것, 혹은 이들의 조합을 행하는 것을 수행할 수 있다. 일부 구현예들에서, 검색 시스템은 쿼리 요청자로 하여금 회답의 불허를 표시할 수 있도록 하는 링크 혹은 다른 제어를 써드 파티 검색 애플리케이션에 의해 제공되는 회답과 함께 제공할 수 있다. 검색 시스템은 개개의 쿼리 요청자들이 이러한 링크 혹은 제어를 선택한 횟수를 추적할 수 있다. 만약 해당 써드 파티 애플리케이션에 대해 이러한 링크 혹은 제어를 선택한 개개의 요청자들의 수가 임계치를 충족시킨다면, 검색 시스템은 그 써드 파티 검색 애플리케이션을 비활성화시키는 것, 또는 그 써드 파티 검색 애플리케이션과 관련된 사이트 혹은 회답의 순위를 감소시키는 것을 행할 수 있다. 따라서, 만약 써드 파티가 품질이 낮은 회답들을 갖는 써드 파티 검색 애플리케이션을 제공한다면, 검색 시스템은 인덱싱 문서들의 코퍼스로부터 발생된 검색 결과들에서 그 써드 파티 검색 애플리케이션과 관련된 사이트의 순위를 감소시킴으로써 해당 써드 파티에게 패널티(penalty)를 주는 선택을 할 수 있다.
쿼리 시간에 써드 파티 검색 애플리케이션들을 호출하는 것과 동시에 그리고 써드 파티 검색 애플리케이션을 호출하는 것과는 독립적으로, 검색 시스템은 또한, 데이터 테이블에 대한 업데이트들을 수신할 수 있다(420). 검색 시스템은, 예를 들어, 피드(feed) 혹은 진행중인 업데이트 프로토콜, 예컨대 펍섭허버브(pubsubhubbub)와 같은 것을 사용하여, 써드 파티가 원할 때마다 써드 파티로 하여금 데이터 테이블을 업데이트하도록 하는 수단을 제공할 수 있다. 이것은 검색 시스템에 업데이트들에 관한 점검의 부담을 부과함이 없이 자연 언어 회답을 발생시키기 위해 사용되는 데이터가 신선하게 유지되도록 보장한다.
추가적으로, 검색 시스템은 써드 파티로 하여금 쿼리 템플릿들과, 파라미터들과, 그리고 이들의 써드 파티 검색 애플리케이션들에 대한 명령들을 업데이트하도록 할 수 있다. 검색 시스템이 쿼리들에 응답함에 따라 프로세스(400)는 단계(410) 내지 단계(420)를 계속 수행할 수 있다. 당연한 것으로, 검색 시스템은 단계(405)의 일부로서 다양한 써드 파티들로부터 다수의 써드 파티 검색 애플리케이션들을 어셈블링할 수 있다. 일부 구현예들에서, 검색 시스템은 수 만개의 이러한 애플리케이션들을 어셈블링할 수 있고, 이것은 수 만개의 써드 파티들로 하여금 타겟팅 쿼리들에 응답하여 자연 언어 회답들을 발생시키도록 하는 기회를 제공한다.
앞에서는 문서-기반 코퍼스에 대한 증진된 검색 결과들을 제공하는 것에 관해 논의되었지만, 써드 파티 검색 애플리케이션들은 또한, 이미지 혹은 비디오 검색들, 맵 검색들(map searches), 소셜 미디어 검색들(social media searches) 등과 같은 다른 집합체들에서 유용할 수 있다. 이에 따라, 앞서의 논의는 하나의 예이며, 한정의 의미를 갖지 않는다.
도 7은 일반적인 컴퓨터 디바이스(700)의 예를 보여주며, 이것은 도 1의 시스템(100), 써드 파티 디바이스(185) 및/또는 클라이언트(180)일 수 있고, 본 명세서에서 설명되는 기법들과 함께 사용될 수 있다. 컴퓨팅 디바이스(700)는 다양한 예시적 형태의 컴퓨팅 디바이스들을 나타내도록 의도되었는바, 이러한 컴퓨팅 디바이스들은, 랩탑들, 데스크탑들, 워크스테이션들, 개인 휴대 정보 단말기들(personal digital assistants), 셀룰러 전화기들, 스마트 폰들, 태블릿들, 서버들, 및 다른 컴퓨팅 디바이스들과 같은 것이며, 여기에는 웨어러블 디바이스들(wearable devices)이 포함된다. 여기서 제시되는 컴포넌트들, 이들의 연결들 및 관계들, 그리고 이들의 기능들은 단지 예시적 의미만을 갖고 있으며, 본 명세서에서 설명되고 그리고/또는 청구되는 발명들의 구현예들을 한정하는 의미를 갖지 않는다.
컴퓨팅 디바이스(700)는 인터페이스(708)를 통해 연결되는 프로세서(702), 메모리(704), 저장 디바이스(706), 및 확장 포트들(710)을 포함한다. 일부 구현예들에서, 컴퓨팅 디바이스(700)는 다른 컴포넌트들 중에서도, 송수신기(746), 통신 인터페이스(744), 및 GPS(Global Positioning System) 수신기 모듈(748)을 포함할 수 있는바, 이들은 인터페이스(708)를 통해 연결된다. 디바이스(700)는 통신 인터페이스(744)를 통해 무선으로 통신할 수 있는데, 필요한 곳에 디지털 신호 프로세싱 회로를 포함할 수 있다. 컴포넌트들(702, 704, 706, 708, 710, 740, 744, 746, 및 748) 각각은 공통 마더보드 상에 혹은 다른 방식으로 적절하게 장착될 수 있다.
프로세서(702)는 컴퓨팅 디바이스(700) 내에서의 실행을 위한 명령들을 프로세싱할 수 있으며, 여기서 실행을 위한 명령들에는 디스플레이(716)와 같은 외부 입력/출력 디바이스 상에서의 GUI를 위한 그래픽 정보를 디스플레이하기 위해 저장 디바이스(706) 상에 혹은 메모리 (704) 내에 저장되는 명령들이 포함된다. 디스플레이(716)는 모니터 혹은 평판 터치스크린 디스플레이(flat touchscreen display)일 수 있다. 일부 구현예들에서는, 복수의 프로세서들 및/또는 복수의 버스들이 복수의 메모리들 및 여러 타입의 메모리와 함께 적절하게 사용될 수 있다. 또한, 복수의 컴퓨팅 디바이스들(700)이 (예를 들어, 서버 뱅크(server bank), 블레이드 서버들(blade servers)의 그룹, 혹은 멀티-프로세서 시스템으로서) 연결될 수 있으며, 이 경우 각각의 디바이스는 필요한 동작들 중 일부분들을 제공한다.
메모리(704)는 컴퓨팅 디바이스(700) 내에서의 정보를 저장한다. 일부 구현예들에서, 메모리(704)는 휘발성 메모리 유닛 혹은 유닛들이다. 또 하나의 다른 구현예에서, 메모리(704)는 비-휘발성 메모리 유닛 혹은 유닛들이다. 메모리(704)는 또한 자기 디스크 혹은 광학 디스크와 같은 또 하나의 다른 형태의 컴퓨터-판독가능 매체일 수 있다. 일부 구현예들에서, 메모리(704)는 확장 인터페이스를 통해 제공되는 확장 메모리를 포함할 수 있다.
저장 디바이스(706)는 컴퓨팅 디바이스(700)에 대한 대용량 저장소를 제공할 수 있다. 일 구현예에서, 저장 디바이스(706)는 컴퓨터-판독가능 매체일 수 있거나 혹은 컴퓨터-판독가능 매체를 포함할 수 있는바, 이러한 컴퓨터-판독가능 매체는, 플로피 디스크 디바이스, 하드 디스크 디바이스, 광학 디스크 디바이스, 혹은 테이프 디바이스, 플래시 메모리 혹은 다른 유사한 솔리드 스테이트 메모리 디바이스(solid state memory device), 또는 디바이스들의 어레이와 같은 것이며, 여기에는 저장 영역 네트워크 혹은 다른 구성들 내의 디바이스들이 포함된다. 컴퓨터 프로그램 제품은 이러한 컴퓨터-판독가능 매체에 유형으로 구현될 수 있다. 컴퓨터 프로그램 제품은 또한, 실행될 때 앞에서 설명된 것들과 같은 하나 이상의 방법들을 수행하는 명령들을 포함할 수 있다. 컴퓨터-판독가능 매체 혹은 머신-판독가능 매체는 메모리(704), 저장 디바이스(706), 혹은 프로세서(702) 상의 메모리와 같은 저장 디바이스이다.
인터페이스(708)는, 컴퓨팅 디바이스(700)에 대한 대역폭-집중 동작(bandwidth-intensive operation)들을 관리하는 고속 제어기(high speed controller)일 수 있거나, 혹은 보다 낮은 대역폭-집중 동작들을 관리하는 저속 제어기(low speed controller)일 수 있거나, 혹은 이러한 제어기들의 조합일 수 있다. 외부 인터페이스(740)는 디바이스(700)가 다른 디바이스들과 근거리 영역 통신을 할 수 있도록 하기 위해 제공될 수 있다. 일부 구현예들에서, 제어기(708)는 저장 디바이스(706) 및 확장 포트(714)에 결합될 수 있다. 확장 포트는 다양한 통신 포트들(예를 들어, USB, 블루투스(Bluetooth), 이더넷(Ethernet), 무선 이더넷)을 포함할 수 있으며, 하나 이상의 입력/출력 디바이스들에 결합될 수 있는바, 예컨대, 키보드, 포인팅 디바이스(pointing device), 스캐너(scanner)와 같은 것에 결합될 수 있고, 또는 예를 들어, 네트워크 어댑터를 통해 스위치 혹은 라우터와 같은 네트워킹 디바이스에 결합될 수 있다.
컴퓨팅 디바이스(700)는 도면에서 제시되는 바와 같이 다수의 상이한 형태로 구현될 수 있다. 예를 들어, 컴퓨팅 디바이스(700)는 표준 서버(730)로서 구현될 수 있거나, 혹은 이러한 서버들의 그룹 내에서 복수의 개체들로서 구현될 수 있다. 컴퓨팅 디바이스(700)는 또한 랙 서버 시스템의 일부분으로서 구현될 수 있다. 추가적으로, 컴퓨팅 디바이스(700)는 랩탑 컴퓨터(722)와 같은 개인용 컴퓨터 혹은 스마트 폰(736) 내에 구현될 수 있다. 전체 시스템은 서로 통신하는 복수의 컴퓨팅 디바이스들(700)로 구성될 수 있다. 다른 구성들이 가능하다.
도 8은 일반적인 컴퓨터 디바이스(800)의 예를 보여주며, 이것은 도 1의 시스템(100)일 수 있고, 본 명세서에서 설명되는 기법들과 함께 사용될 수 있다. 컴퓨팅 디바이스(800)는 다양한 예시적 형태의 대규모 데이터 프로세싱 디바이스들을 나타내도록 의도된 것인데, 예를 들어, 서버들, 블레이드 서버들, 데이터센터들, 메인프레임들(mainframes), 및 다른 대규모 컴퓨팅 디바이스들과 같은 것을 나타내도록 의도된 것이다. 컴퓨팅 디바이스(800)는 분산형 시스템일 수 있는데, 여기서 분산형 시스템은 복수의 프로세서들을 구비하며, 가능하게는 네트워크 부착 저장 노드들을 포함하고, 이들은 하나 이상의 통신 네트워크들에 의해 상호연결된다. 여기서 제시되는 컴포넌트들, 이들의 연결들 및 관계들, 그리고 이들의 기능들은 단지 예시적 의미만을 갖고 있으며, 본 명세서에서 설명되고 그리고/또는 청구되는 발명들의 구현예들을 한정하는 의미를 갖지 않는다.
분산형 컴퓨팅 시스템(800)은 임의 개수의 컴퓨팅 디바이스들(880)을 포함할 수 있다. 컴퓨팅 디바이스들(880)은 로컬-영역 네트워크 혹은 와이드-영역 네트워크, 전용 광학 링크들, 모뎀들, 브리지들(bridges), 라우터들, 스위치들, 유선 혹은 무선 네트워크들 등을 통해 통신하는 서버 혹은 랙 서버들, 메인프레임들 등을 포함할 수 있다.
일부 구현예들에서, 각각의 컴퓨팅 디바이스는 복수의 랙들을 포함할 수 있다. 예를 들어, 컴퓨팅 디바이스(880a)는 복수의 랙들(858a 내지 858n)을 포함한다. 각각의 랙은 프로세서들(852a 내지 852n 및 862a 내지 862n)과 같은 하나 이상의 프로세서들을 포함할 수 있다. 프로세서들은 데이터 프로세서들, 네트워크 부착 저장 디바이스들, 및 다른 컴퓨터 제어 디바이스들을 포함할 수 있다. 일부 구현예들에서, 하나의 프로세서는 마스터 프로세서로서 동작할 수 있고 스케쥴링 및 데이터 분배 태스크들을 제어할 수 있다. 프로세서들은 하나 이상의 랙 스위치들(858)을 통해 상호연결될 수 있고, 하나 이상의 랙들은 스위치(878)를 통해 연결될 수 있다. 스위치(878)는 복수의 연결된 컴퓨팅 디바이스들(800) 간의 통신들을 처리할 수 있다.
각각의 랙은 메모리(854) 및 메모리(864)와 같은 메모리와, 그리고 856 및 866과 같은 저장소를 포함할 수 있다. 저장소(856 및 866)는 대용량 저장소를 제공할 수 있고, 휘발성 혹은 비-휘발성 저장소를 포함할 수 있는바, 예를 들어, 네트워크-부착 디스크들, 플로피 디스크들, 하드 디스크들, 광학 디스크들, 테이프들, 플래시 메모리 혹은 다른 유사한 솔리드 스테이트 메모리 디바이스 또는 디바이스들의 어레이와 같은 것을 포함할 수 있으며, 여기에는 저장 영역 네트워크 혹은 다른 구성들 내의 디바이스들이 포함된다. 저장소들(856 또는 866)은 복수의 프로세서들 간에 공유될 수 있거나, 복수의 랙들 간에 공유될 수 있거나, 혹은 복수의 컴퓨팅 디바이스들 간에 공유될 수 있으며, 프로세서들 중 하나 이상의 프로세서에 의해 실행가능한 명령들을 저장하는 컴퓨터-판독가능 매체를 포함할 수 있다. 메모리(854 및 864)는 예를 들어, 휘발성 메모리 유닛 혹은 유닛들, 비-휘발성 메모리 유닛 혹은 유닛들, 그리고/또는 다른 형태의 컴퓨터-판독가능 매체들을 포함할 수 있는바, 예를 들어, 자기 디스크 혹은 광학 디스크, 플래시 메모리, 캐시, 랜덤 액세스 메모리(Random Access Memory, RAM), 판독 전용 메모리(Read Only Memory, ROM), 및 이들의 조합들과 같은 것을 포함할 수 있다. 메모리(854)와 같은 메모리는 또한 프로세서들(852a 내지 852n) 간에 공유될 수 있다. 인덱스와 같은 데이터 구조들은 예를 들어, 저장소(856) 및 메모리(854)에 걸쳐 저장될 수 있다. 컴퓨팅 디바이스(800)는 제시되지 않은 다른 컴포넌트들을 포함할 수 있는바, 예를 들어, 제어기들, 버스들, 입력/출력 디바이스들, 통신 모듈들 등과 같은 것을 포함할 수 있다.
시스템(100)과 같은 전체 시스템은 서로 통신하는 복수의 컴퓨팅 디바이스들(800)로 구성될 수 있다. 예를 들어, 디바이스(880a)는 디바이스들(880b, 880c, 및 880d)과 통신할 수 있고, 이들은 집합적으로 시스템(100)으로서 이해될 수 있다. 또 하나의 다른 예로서, 도 1의 시스템(100)은 하나 이상의 컴퓨팅 디바이스들(800)을 쿼리 엔진(110), 써드 파티 검색 UI(114), 및 써드 파티 검색 애플리케이션(116)으로서 포함할 수 있다. 더욱이, 컴퓨팅 디바이스들 중 일부는 서로 지리적으로 가깝게 위치할 수 있고, 다른 것들은 지리적으로 멀리 떨어져 위치할 수 있다. 시스템(800)의 이러한 레이아웃은 단지 예이며, 시스템은 다른 레이아웃들 혹은 구성들을 취할 수 있다.
다양한 구현예들은 하나 이상의 컴퓨터 프로그램들 내에서의 구현을 포함할 수 있으며, 이러한 컴퓨터 프로그램들은 적어도 하나의 프로그래밍가능 프로세서를 포함하는 프로그래밍가능 시스템 상에서 실행가능하고 그리고/또는 해석가능하며, 여기서 프로그래밍가능 프로세서는 특수 목적 프로세서일 수 있거나 혹은 범용 목적 프로세서일 수 있으며, 저장 시스템, 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스에 대해 이들로부터 데이터 및 명령들을 수신하고 이들에게 데이터 및 명령들을 전송하도록 결합된다.
이러한 컴퓨터 프로그램들(이들은 또한 프로그램들, 소프트웨어, 소프트웨어 애플리케이션들 혹은 코드로서 알려져 있음)은 프로그래밍가능 프로세서를 위한 머신 명령들을 포함하고, 하이-레벨 절차 및/또는 객체-지향 프로그래밍 언어로 구현될 수 있고 그리고/또는 어셈블리/머신 언어로 구현될 수 있다. 본 명세서에서 사용되는 바와 같은, "머신-판독가능 매체", "컴퓨터-판독가능 매체"와 같은 용어들은, 머신 명령들 및/또는 데이터를 프로그래밍가능 프로세서에 제공하기 위해 사용되는, 임의의 비-일시적 컴퓨터 프로그램 제품, 장치, 및/또는 디바이스(예를 들어, 자기 디스크들, 광학 디스크들, 메모리(랜덤 액세스 메모리를 포함함), 프로그래밍가능 로직 디바이스(Programmable Logic Device, PLD)들)를 나타낸다.
본 명세서에서 설명되는 시스템들 및 기법들은 컴퓨팅 시스템 내에서 구현될 수 있는바, 여기서 컴퓨팅 시스템은 백 엔드 컴포넌트(back end component)(예를 들어, 데이터 서버로서의 컴포넌트)를 포함하며, 혹은 미들웨어 컴포넌트(middleware component)(예를 들어, 애플리케이션 서버)를 포함하며, 혹은 프런트 엔드 컴포넌트(front end component)(예를 들어, 본 명세서에서 설명되는 기법들 및 시스템들의 구현예와 사용자가 상호작용할 수 있는 웹 브라우저 혹은 그래픽 사용자 인터페이스를 갖는 클라이언트 컴퓨터)를 포함하며, 또는 이러한 백 엔드 컴포넌트, 미들웨어 컴포넌트, 혹은 프런트 엔드 컴포넌트의 임의의 조합을 포함한다. 시스템의 컴포넌트들은 디지털 데이터 통신의 임의의 형태 혹은 매체(예를 들어, 통신 네트워크)에 의해 상호연결될 수 있다. 통신 네트워크들의 예들은 로컬 영역 네트워크("LAN"), 와이드 영역 네트워크("WAN"), 및 인터넷을 포함한다.
컴퓨팅 시스템은 클라이언트들 및 서버들을 포함할 수 있다. 클라이언트 및 서버는 일반적으로 서로로부터 원격 위치에 있고, 전형적으로 통신 네트워크를 통해 상호작용한다. 클라이언트와 서버의 관계는 각각의 컴퓨터들 상에서 실행되어 서로에 대해 클라이언트-서버 관계를 갖는 컴퓨터 프로그램들에 의해서 일어난다.
다수의 구현예들이 설명되었다. 그럼에도 불구하고, 본 발명의 사상 및 범위로부터 벗어남이 없이 다양한 수정들이 행해질 수 있다. 추가적으로, 도면들에서 제시된 로직 흐름들은 원하는 결과들을 달성하기 위해 그 제시된 특정 순서, 혹은 순차적 순서를 요구하지 않는다. 추가적으로, 다른 단계들이 제공될 수 있고, 또는 설명된 흐름들로부터 단계들이 생략될 수 있으며, 그리고 설명된 시스템들에 다른 컴포넌트들이 추가될 수 있고, 혹은 설명된 시스템들로부터 제거될 수 있다. 따라서, 다른 구현예들은 다음의 청구항들의 범위 내에 있게 된다.

Claims (18)

  1. 컴퓨터로 구현되는 방법으로서,
    쿼리가 쿼리 템플릿에 대응함을 적어도 하나의 프로세서를 사용하여 결정하는 단계 -상기 쿼리 템플릿은 검색 시스템에서 호스팅되는 써드 파티가 제공하는 정규 표현(regular expression)임 -;
    상기 검색 시스템의 상기 적어도 하나의 프로세서를 사용하여, 자연어 회답을 생성하고 그리고 상기 자연어 회답을 포맷팅하기 위해 상기 써드 파티로부터 획득된 컴퓨터 언어 명령어들을 실행함으로써 상기 쿼리에 대한 써드 파티 포맷 자연어 회답(third-party formatted natural language answer)을 생성하는 단계; 그리고
    상기 쿼리에 대한 검색 결과로서 상기 써드 파티 포맷 자연어 회답을 제공하는 단계를 포함하며,
    상기 쿼리 템플릿 및 상기 컴퓨터 언어 명령어들은 써드 파티 사이트(third party site)와 통신하지 않고 상기 써드 파티 포맷 자연어 회답을 생성하는 써드 파티 검색 애플리케이션으로서 상기 검색 시스템에 저장되는 것을 특징으로 하는 컴퓨터로 구현되는 방법.
  2. 제1항에 있어서,
    상기 써드 파티 검색 애플리케이션은 상기 써드 파티로부터 수신되고 그리고 상기 검색 시스템에 저장된 데이터 저장체(data store)를 포함하고,
    컴퓨터 언어 명령어들은 데이터 저장체에 액세스하고 그리고 써드 파티 포맷 자연어 회답을 생성하기 위해 상기 데이터 저장체로부터 획득한 얻어진 정보를 사용하기 위한 명령어들을 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법.
  3. 제2항에 있어서, 상기 써드 파티 검색 애플리케이션은, 상기 데이터 저장체에 레코드를 위치시키고, 상기 써드 파티 포맷 자연어 회답의 변수를 대체하도록 상기 레코드의 필드를 사용함으로써, 상기 써드 파티 포맷 자연어 회답을 생성하는 것을 특징으로 하는 컴퓨터로 구현되는 방법.
  4. 제2항 또는 제3항에 있어서,
    상기 정규 표현은 가변 부분을 포함하고, 상기 방법은,
    상기 가변 부분과 매칭하는 상기 쿼리의 부분에 대응하는 쿼리로부터 파라미터 값을 추출하는 단계를 더 포함하며, 상기 파라미터는 상기 데이터 저장체를 액세스하는데 사용되는 것을 특징으로 하는 컴퓨터로 구현되는 방법.
  5. 제1항에 있어서, 상기 방법은,
    상기 쿼리의 콘텍스트로부터 파라미터 값을 획득하는 단계를 더 포함하며,
    상기 써드 파티 포맷 자연어 회답은 상기 파라미터 값을 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법.
  6. 제1항에 있어서, 상기 쿼리는 오디오 쿼리인 것을 특징으로 하는 컴퓨터로 구현되는 방법.
  7. 검색 시스템으로서,
    적어도 하나의 프로세서와; 그리고
    명령어들을 저장하는 메모리를 포함하여 구성되며,
    상기 명령어들은 상기 적어도 하나의 프로세서에 의해 실행될 때, 상기 검색 시스템으로 하여금 제1 동작들을 수행하게 하며, 상기 제1 동작들은,
    정규 표현(regular expression)이 포함된 쿼리 템플릿을 써드 파티로부터 수신하는 동작,
    상기 써드 파티로부터 데이터 저장체를 수신하는 동작 -상기 데이터 저장체는 속성들 및 데이터를 포함함 -,
    상기 써드 파티로부터, 데이터 저장체에 액세스하고 데이터 저장체에 액세스함으로써 식별된 데이터를 포함하는 자연어 회답을 포맷팅하기 위한 컴퓨터 언어 명령어들을 수신하는 동작, 그리고
    상기 데이터 및 속성들을 포함하는 데이터 저장을 위한 데이터 및 상기 쿼리 템플릿을 상기 검색 시스템에서 써드 파티 검색 애플리케이션으로서 저장하는 동작을 포함하며,
    상기 검색 시스템은 써드 파티 사이트와 통신하지 않고 상기 템플릿과 매칭하는 쿼리에 응답하여 상기 써드 파티 포맷 자연어 회답을 생성 및 제공하는 상기 써드 파티 검색 애플리케이션을 실행하는 것을 특징으로 하는 검색 시스템.
  8. 제7항에 있어서,
    상기 메모리는 상기 적어도 하나의 프로세서에 의해 실행될 때, 상기 검색 시스템으로 하여금 제2 동작들을 수행하게 하는 명령어들을 더 저장하며, 상기 제2 동작들은,
    쿼리가 상기 쿼리 템플릿에 대응한다고 결정하는 동작,
    상기 데이터 저장체에 액세스하기 위한 상기 명령어들을 실행함으로써 상기 쿼리에 대한 자연어 회답을 생성하는 동작,
    쿼리에 대한 결과로 상기 자연어 회답을 제공하는 동작을 포함하는 것을 특징으로 하는 검색 시스템.
  9. 제7항 내지 제8항 중 어느 한 항에 있어서,
    상기 수신하고 및 저장하는 동작은 복수의 별개의 써드 파티를 위해 반복되는 것을 특징으로 하는 검색 시스템.
  10. 제7항에 있어서,
    상기 정규 표현은 파라미터를 나타내는 적어도 하나의 가변 부분을 포함하고,
    상기 데이터 저장체에 액세스하기 위한 컴퓨터 언어 명령어들은
    상기 데이터 저장체를 액세스하기 위한 파라미터 값으로서 상기 가변 부분과 매칭하는 수신된 쿼리의 부분을 사용하기 위한 명령어들을 포함하는 것을 특징으로 하는 검색 시스템.
  11. 제7항에 있어서,
    상기 써드 파티로부터 복수의 쿼리 템플릿들이 수신되고, 각 쿼리 템플릿은 정규 표현이며,
    상기 복수의 쿼리 템플릿들 중 적어도 하나의 쿼리 템플릿은 파라미터를 나타내는 가변 부분을 포함하고, 데이터 저장체에 액세스하기 위한 컴퓨터 언어 명령들은 써드 파티 검색 애플리케이션을 트리거링하는 쿼리 템플릿에 응답하여 상기 데이터 저장체에 액세스하도록 상기 파라미터 및 상기 가변 부분을 매칭하는 쿼리의 일부분을 사용하기 위한 명령어들을 포함하며,
    상기 복수의 쿼리 템플릿들 중 적어도 하나의 쿼리 템플릿은 가변 부분을 갖지 않으며, 상기 데이터 저장체에 액세스하기 위한 컴퓨터 언어 명령어들은
    써드 파티 검색 애플리케이션을 트리거링하는 적어도 하나의 쿼리 템플릿에 응답하여 상기 데이터 저장체에 액세스하는데 사용되는 파라미터 값을 식별하도록 상기 쿼리의 콘텍스트를 사용하기 위한 명령어들을 포함하는 것을 특징으로 하는 검색 시스템.
  12. 제7항에 있어서, 상기 검색 시스템은,
    주기적으로 상기 써드 파티로부터 상기 데이터 저장체에 대한 업데이트된 데이터를 수신하는 동작; 그리고
    상기 업데이트된 데이터로 상기 데이터 저장체를 업데이트시키는 동작을 더 포함하는 것을 특징으로 하는 검색 시스템.
  13. 검색 시스템으로서,
    적어도 하나의 프로세서와; 그리고
    명령어들을 저장하는 메모리를 포함하며,
    상기 명령어들은 상기 적어도 하나의 프로세서에 의해 실행될 때, 상기 검색 시스템으로 하여금 동작들을 수행하게 하며, 상기 동작들은,
    쿼리가 쿼리 템플릿에 기초하여 상기 검색 시스템에서 호스팅되는 써드 파티 검색 애플리케이션을 트리거(trigger)하는 것으로 결정하는 동작 -상기 쿼리 템플릿은 정규 표현이며, 상기 쿼리는 상기 쿼리 내의 각각의 문자가 상기 정규 표현의 고정 부분 또는 상기 정규 표현의 가변 부분에 대응한다고 결정한 것에 응답하여 상기 써드 파티 검색 애플리케이션을 트리거링함 -;
    상기 쿼리에 대한 써드 파티 포맷 자연어 회답을 생성하고 그리고 상기 자연어 회답을 포맷팅하기 위해 써드 파티로부터 획득된 컴퓨터 언어 명령어들을 실행하는 동작; 그리고
    상기 쿼리에 대한 응답으로서 상기 써드 파티 포맷 자연어 회답을 제공하는 동작을 포함하며, 상기 쿼리 템플릿 및 상기 컴퓨터 언어 명령어들은 써드 파티 사이트(third party site)와 통신하지 않고 상기 써드 파티 포맷 자연어 회답을 생성하는 써드 파티 검색 애플리케이션으로서 상기 검색 시스템에 저장되는 것을 특징으로 하는 검색 시스템.
  14. 제13항에 있어서,
    상기 쿼리가 상기 써드 파티 검색 애플리케이션을 트리거하는 것으로 결정하는 동작은,
    상기 쿼리가 대명사(pronoun)를 포함함을 결정하는 것과, 그리고
    상기 쿼리 내의 상기 대명사를 상기 쿼리의 쿼리 요청자에 의해 제출된 이전의 쿼리로부터의 명사(noun)로 대체(substitute)하는 것을 포함하는 것을 특징으로 하는 검색 시스템.
  15. 제13항에 있어서, 상기 메모리는 상기 적어도 하나의 프로세서에 의해 실행될 때 상기 검색 시스템으로 하여금 상기 쿼리로부터 파라미터 값을 추출하게 하고 -상기 파라미터 값은 상기 가변 부분에 대응하는 상기 쿼리의 문자들임 -, 그리고 상기 파라미터 값을 사용하여 상기 써드 파티 포맷 자연어 회답을 생성하게 하는 명령어들을 더 저장하는 것을 특징으로 하는 검색 시스템.
  16. 제13항에 있어서,
    상기 메모리는 상기 적어도 하나의 프로세서에 의해 실행될 때 상기 검색 시스템으로 하여금 상기 쿼리의 콘텍스트로부터 파라미터 값을 획득하도록 하는 명령어들을 더 저장하고, 상기 파라미터 값은 상기 써드 파티 포맷 자연어 회답을 생성하는 데 사용되는 것을 특징으로 하는 검색 시스템.
  17. 제13항 내지 제16항 중 어느 한 항에 있어서, 상기 쿼리는 오디오 쿼리인 것을 특징으로 하는 검색 시스템.
  18. 삭제
KR1020157036845A 2013-07-17 2014-07-15 검색 시스템을 위한 써드 파티 검색 애플리케이션들 KR102263637B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201361847371P 2013-07-17 2013-07-17
US61/847,371 2013-07-17
US13/960,302 2013-08-06
US13/960,302 US10019484B2 (en) 2013-07-17 2013-08-06 Third party search applications for a search system
PCT/US2014/046638 WO2015009687A1 (en) 2013-07-17 2014-07-15 Third party search applications for a search system

Publications (2)

Publication Number Publication Date
KR20160033666A KR20160033666A (ko) 2016-03-28
KR102263637B1 true KR102263637B1 (ko) 2021-06-10

Family

ID=52344470

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157036845A KR102263637B1 (ko) 2013-07-17 2014-07-15 검색 시스템을 위한 써드 파티 검색 애플리케이션들

Country Status (5)

Country Link
US (2) US10019484B2 (ko)
EP (1) EP3022666A1 (ko)
KR (1) KR102263637B1 (ko)
CN (2) CN105431844B (ko)
WO (1) WO2015009687A1 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9405822B2 (en) * 2013-06-06 2016-08-02 Sheer Data, LLC Queries of a topic-based-source-specific search system
US9798829B1 (en) * 2013-10-22 2017-10-24 Google Inc. Data graph interface
US9430586B2 (en) * 2014-04-02 2016-08-30 Microsoft Technology Licensing, Llc Reference resolution
US20150363473A1 (en) * 2014-06-17 2015-12-17 Microsoft Corporation Direct answer triggering in search
US10762143B2 (en) * 2015-02-13 2020-09-01 Microsoft Technology Licensing, Llc Extension of third party application functionality for intent determination
US10719524B1 (en) 2015-04-15 2020-07-21 Arimo, LLC Query template based architecture for processing natural language queries for data analysis
US9854030B2 (en) * 2015-06-11 2017-12-26 Airwatch Llc Searching content associated with multiple applications
US10104051B2 (en) 2015-10-27 2018-10-16 Airwatch Llc Searching content associated with multiple applications
US10162853B2 (en) * 2015-12-08 2018-12-25 Rovi Guides, Inc. Systems and methods for generating smart responses for natural language queries
US9893808B2 (en) * 2016-03-18 2018-02-13 Target Brands, Inc. VLC location data applications in a retail setting
US10776352B2 (en) * 2016-11-30 2020-09-15 Hewlett Packard Enterprise Development Lp Generic query language for data stores
CN108446286B (zh) * 2017-02-16 2023-04-25 阿里巴巴集团控股有限公司 一种自然语言问句答案的生成方法、装置及服务器
CN107332922B (zh) * 2017-07-19 2020-07-17 佛山科学技术学院 基于社区管理的嵌入式Web服务器的数据传输方法及系统
US10878019B2 (en) * 2017-10-20 2020-12-29 Dropbox, Inc. Hosted storage for third-party services
US11113411B2 (en) 2017-10-20 2021-09-07 Dropbox, Inc. Authentication security model for a content management system
US10979235B2 (en) 2017-10-20 2021-04-13 Dropbox, Inc. Content management system supporting third-party code
CN108008941B (zh) * 2017-11-16 2019-06-21 北京大学 一种安卓应用的深链接口自动生成方法及深链执行方法
US11392688B2 (en) 2018-03-21 2022-07-19 Google Llc Data transfer in secure processing environments
US11499837B2 (en) 2018-09-30 2022-11-15 Strong Force Intellectual Capital, Llc Intelligent transportation systems
EP3856596A4 (en) 2018-09-30 2022-10-12 Strong Force Intellectual Capital, LLC INTELLIGENT TRANSPORT SYSTEMS
US11170017B2 (en) 2019-02-22 2021-11-09 Robert Michael DESSAU Method of facilitating queries of a topic-based-source-specific search system using entity mention filters and search tools
CN111090794B (zh) * 2019-11-07 2023-12-05 远景智能国际私人投资有限公司 气象数据查询方法、装置及存储介质
US11461419B2 (en) 2020-07-09 2022-10-04 Google Llc Discovering alternate online service providers

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050114306A1 (en) 2003-11-20 2005-05-26 International Business Machines Corporation Integrated searching of multiple search sources

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6295528B1 (en) * 1998-11-30 2001-09-25 Infospace, Inc. Method and apparatus for converting a geographic location to a direct marketing area for a query
US6904433B2 (en) * 2000-04-25 2005-06-07 At&T Corp. Method for using query templates in directory caches
US7418440B2 (en) * 2000-04-13 2008-08-26 Ql2 Software, Inc. Method and system for extraction and organizing selected data from sources on a network
US6946715B2 (en) * 2003-02-19 2005-09-20 Micron Technology, Inc. CMOS image sensor and method of fabrication
US7389306B2 (en) * 2003-07-25 2008-06-17 Enkata Technologies, Inc. System and method for processing semi-structured business data using selected template designs
US20060015483A1 (en) * 2004-07-15 2006-01-19 International Business Machines Corporation SQL query enhancement technique
US7555475B2 (en) * 2005-03-31 2009-06-30 Jiles, Inc. Natural language based search engine for handling pronouns and methods of use therefor
CA2669236C (en) * 2005-11-16 2016-05-24 Evri Inc. Extending keyword searching to syntactically and semantically annotated data
US20080066099A1 (en) * 2006-09-11 2008-03-13 Apple Computer, Inc. Media systems with integrated content searching
CN101231636B (zh) * 2007-01-25 2013-09-25 北京搜狗科技发展有限公司 一种便捷的信息搜索方法、系统及一种输入法系统
US7991609B2 (en) * 2007-02-28 2011-08-02 Microsoft Corporation Web-based proofing and usage guidance
CA2717462C (en) * 2007-03-14 2016-09-27 Evri Inc. Query templates and labeled search tip system, methods, and techniques
US7917840B2 (en) * 2007-06-05 2011-03-29 Aol Inc. Dynamic aggregation and display of contextually relevant content
US7685141B2 (en) * 2007-06-06 2010-03-23 Yahoo! Inc. Connection sub-graphs in entity relationship graphs
US9104738B2 (en) * 2008-06-19 2015-08-11 Tropare, Inc. Leveraging collaborative cloud services to build and share apps
US20100306678A1 (en) * 2009-05-28 2010-12-02 Kulas Charles J User interface controls including capturing user mood
US20100332493A1 (en) * 2009-06-25 2010-12-30 Yahoo! Inc. Semantic search extensions for web search engines
US9361387B2 (en) * 2010-04-22 2016-06-07 Microsoft Technology Licensing, Llc Context-based services
US9003552B2 (en) * 2010-12-30 2015-04-07 Ensighten, Inc. Online privacy management
EP2659367B1 (en) * 2010-12-30 2017-02-15 Ensighten, Inc. Online privacy management
US8782081B2 (en) * 2011-05-11 2014-07-15 Google Inc. Query template definition and transformation
US8526930B2 (en) * 2011-07-07 2013-09-03 GM Global Technology Operations LLC Enhanced smartphone in-vehicle accommodation
US20130024448A1 (en) * 2011-07-21 2013-01-24 Microsoft Corporation Ranking search results using feature score distributions
US9734252B2 (en) * 2011-09-08 2017-08-15 Wolfram Alpha Llc Method and system for analyzing data using a query answering system
US9262133B2 (en) * 2012-01-27 2016-02-16 Amx Llc Mapping and formatting input commands to a third party protocol
US20130238609A1 (en) * 2012-03-07 2013-09-12 Microsoft Corporation Query result rendering
WO2013166082A1 (en) * 2012-04-30 2013-11-07 Brightedge Technologies, Inc. Integration of third party information
US20140006370A1 (en) * 2012-06-30 2014-01-02 Microsoft Corporation Search application for search engine results page
US20140101739A1 (en) * 2012-10-09 2014-04-10 Microsoft Corporation Semantic challenge for audio human interactive proof
CN103034704A (zh) * 2012-12-07 2013-04-10 Tcl集团股份有限公司 一种多媒体文件的搜索方法、装置和系统

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050114306A1 (en) 2003-11-20 2005-05-26 International Business Machines Corporation Integrated searching of multiple search sources

Also Published As

Publication number Publication date
US20180314736A1 (en) 2018-11-01
CN105431844B (zh) 2019-07-09
US20150026212A1 (en) 2015-01-22
KR20160033666A (ko) 2016-03-28
US10289618B2 (en) 2019-05-14
CN110362727B (zh) 2023-07-14
CN110362727A (zh) 2019-10-22
EP3022666A1 (en) 2016-05-25
CN105431844A (zh) 2016-03-23
US10019484B2 (en) 2018-07-10
WO2015009687A1 (en) 2015-01-22

Similar Documents

Publication Publication Date Title
US10289618B2 (en) Third party search applications for a search system
JP6388988B2 (ja) オンライン・ソーシャル・ネットワークにおける検索クエリのための静的ランク付け
JP6293830B2 (ja) オンライン・ソーシャル・ネットワークにおける検索クエリに対する近似的プライバシ
US10289700B2 (en) Method for dynamically matching images with content items based on keywords in response to search queries
JP6377807B2 (ja) オンライン・ソーシャル・ネットワークにおける検索クエリの書き換え
JP6408081B2 (ja) オンライン・ソーシャル・ネットワーク上の検索結果をブレンドすること
US10489448B2 (en) Method and system for dynamically ranking images to be matched with content in response to a search query
US10296538B2 (en) Method for matching images with content based on representations of keywords associated with the content in response to a search query
US20160179816A1 (en) Near Real Time Auto-Suggest Search Results
US9418128B2 (en) Linking documents with entities, actions and applications
JP6407968B2 (ja) 可変検索クエリ・バーティカル・アクセス
US20110225139A1 (en) User role based customizable semantic search
US10235387B2 (en) Method for selecting images for matching with content based on metadata of images and content in real-time in response to search queries
US10275472B2 (en) Method for categorizing images to be associated with content items based on keywords of search queries
JP2015531912A (ja) ソーシャルグラフ情報に基づく構造化検索クエリ
US10685073B1 (en) Selecting textual representations for entity attribute values
US20170357712A1 (en) Method and system for searching and identifying content items in response to a search query using a matched keyword whitelist
JP2011501849A (ja) 情報マップ管理システムおよび情報マップ管理方法
US11108802B2 (en) Method of and system for identifying abnormal site visits
KR20110094633A (ko) 개인화된 폴더를 이용한 검색 방법 및 시스템과 이를 위한 프로그램 기록매체

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right