2018년 10월 4일 엔지니어링

크롤링, 코드, 검색: Elastic Site Search와 Elastic App Search

By Kellen Evan

Elastic에서는 효율적이고 가치 있는 관리 검색 서비스를 제공합니다. 이 문서에서는 그 중 두 가지인 Elastic Site Search 및 Elastic App Search에 대해 살펴보겠습니다. 두 서비스 모두 최소 구현 시간으로 연관성이 높고 가치 있는 검색 환경을 만들고 조정할 수 있는 도구를 제공하려는 공동의 목적을 갖고 있습니다. 이러한 면에서 두 서비스가 유사하지만 이 목적을 달성하는 방법은 다릅니다.

이 문서를 읽은 후에는 어떤 솔루션이 더 적합할지 파악할 수 있을 것입니다.

문제점: 심층 검색

Elastic Site Search와 Elastic App Search 모두 분산형 오픈 소스 RESTtful 검색 엔진인 Elasticsearch를 활용합니다. 실제로 이 검색 엔진은 꼭 필요합니다. 검색은 까다로운 문제이며 Elasticsearch는 심층적인 문제 해결을 도와줄 수 있는 검증된 도구이기 때문입니다.

검색 관련 문제점은 다음과 같은 세 가지 주요 측면으로 요약할 수 있습니다.

수집. 데이터가 있고 이 데이터를 검색 가능하게 만들고 싶습니다. 수집 작업은 개체(예: 웹 페이지, 백엔드 API로부터의 응답)를 모아 검색 가능한 문서로 변환합니다. 이러한 프로세스는 인덱싱이라고도 알려져 있으며 데이터를 모아서 검색 엔진이 처리하기에 최적인 형태로 변환합니다. 데이터를 어떻게 인덱싱할까요? 인프라를 호스팅할까요? 데이터가 퍼블릭 인터넷에 있는 경우에는 어떻게 할까요? 데이터가 프라이빗 인트라넷에 있는 경우에는 어떻게 할까요?  

수집이 간단하고 유연성이 있으며 개발의 오버헤드가 최소이기를 원할 것입니다.

결과 제공. 엔진에 많은 문서가 있고 문서를 검색할 수 있습니다. 검색 결과로 무엇을 받을까요? 물론 문서를 받지만, 어떤 문서를 몇 개나 어떤 형태로 받을까요? 어떤 느낌의 문서 결과일까요? 자동 완성 기능은 어떤가요? 사용자보다 앞서 제공하는 예측 환경을 구축할까요? 결과가 가치를 창출할까요?

비즈니스 목표 달성, ROI 개선, 친숙한 사용자 환경 제공을 도와주는 연관성 있는 결과를 원할 것입니다.

관리. 검색 환경을 디자인하고 개발한 후에는 어떻게 관리할까요? 개발자가 구축하는 데 걸린 시간 이외에, 이를 조정하고 개선하려면 또 얼마만큼의 시간이 필요할까요? 비기술적인 이해 관계자도 진행되는 최적화 과정에 참여할 수 있을까요? 액세스 권한은 어떻게 관리할까요? 분석을 캡처하여 검색을 분석 파이프라인에 통합시킬까요?

현재 잘 작동하고, 모든 이해 관계자에게 유용하고 통찰력을 제공하며, 최소한의 마찰로 개선 및 변경이 가능한 검색을 원합니다.

좋은 두 가지: 사과와 오렌지

Elastic App Search와 Elastic Site Search 모두 다양한 많은 사용 사례에 걸쳐 심층 검색 요구사항을 만족시킬 수 있습니다. 전자 상거래 플랫폼, 지식베이스, 미디어 회사, 게임 애플리케이션, SaaS 제공, 또는 혼합 사용 플랫폼 모두에 있어서 두 솔루션 모두 고품질 검색 환경을 제공합니다.

두 솔루션 모두 완전 관리형이며, 문서화가 잘 되어 있을 뿐만 아니라, 세계 최고 수준의 지원을 제공하며 다음과 같은 기능을 제공합니다.

  • 동의어, 가중치, 결과 랭킹 등을 통한 동종 업계 최고의 연관성 및 세부 단위의 연관성 조정.
  • 언어에 최적화된 엔진을 통해 14개 언어로 개선된 검색 연관성.
  • 심층 분석을 통해 사용자가 검색하는 방법, 검색하는 대상, 검색하지 않는 대상에 대한 가치 있는 정보 제공.
  • API 기반 인덱싱 및 패시팅, 필터링, 정렬, 부스팅과 같은 쿼리 시점 매개변수를 동반하는 심층 검색 API.

이 두 서비스 중 무엇을 선택해야 할지가 문제입니다. 궁극적으로는 수집, 결과 제공, 관리 해결 방법이 기준이 됩니다.

웹 페이지를 자동으로 스캔 및 인덱싱하고, 기본 제공 솔루션 또는 플러그인을 바로 사용하고, 깔끔하고 기능적인 대시보드를 활용하며, 지원되는 API 엔드포인트를 적용하기 원하시나요? 그러면 Elastic Site Search가 적합합니다.

아니면, 가장 심층적이고 다양한 검색 및 기능 API 엔드포인트를 애플리케이션 코드에 통합하고 액세스 가능한 모던 대시보드를 통해 연관성을 세부적으로 조정하고 싶으신가요? 그렇다면 Elastic App Search가 적합합니다.

Elastic Site Search: 다목적 크롤링

Elastic Site Search의 중심부에는 Site Search Crawler가 있습니다. Site Search Crawler는 다른 웹 크롤러와 작동 방식이 유사합니다. Google, DuckDuckGo, Bing 등 모든 주요 검색 엔진은 정교한 시스템인 크롤러를 모든 퍼블릭 웹 페이지에 배포합니다. 크롤러는 이러한 웹 페이지를 스캔 및 인덱싱하고, 메트릭을 수집하고, 콘텐츠를 캡처하고, 그 과정에서 문서를 구축합니다.

Site Search Crawler는 Elastic에서 호스팅하고 관리합니다. Site Search Crawler의 자동화된 수집 과정은 오류 시 지능적으로 응답하며, 지속적인 구성이 필요하지 않습니다. 도메인을 추가하고, 선택사항으로 메타 태그, Robots.txt 파일, RSS/Atom 피드, 또는 사이트맵을 큐레이팅한 다음, 페이지가 검색 가능한 인덱싱된 문서로 변환되는 것을 지켜보기만 하면 됩니다.

예를 들어, 유용한 도움말로 가득찬 대규모의 공개 지식베이스가 있다고 가정합니다. 웹사이트 주소를 입력하면 Site Search Crawler가 각 웹 페이지를 크롤링하여 인덱싱합니다. 일단 인덱싱된 페이지는 스키마의 필드로 정리됩니다. 이제 가중치와 같은 기능의 연관성 조정 기능을 적용할 수 있습니다.

특정 필드 집합을 선택한 다음 각 필드의 “가중치”를 조정할 수 있습니다. 예를 들어, 사용자 검색을 문서 제목에만 국한하고, 본문 텍스트는 결과에 영향을 미치지 않게 하려면 어떻게 해야 할까요? 가장 인기 있고, 클릭 수가 더 많은 결과를 선호하려면 어떻게 해야 할까요?

제목, 본문, 인기도 필드를 선택한 다음 가중치를 1~10 단위로 조정합니다.

자동화된 수집 및 뛰어난 기능들이 매력적이기는 하지만, 검색 환경 만들기는 어떨까요? Elastic Site Search에서 어떤 방식으로 이러한 뛰어난 인덱싱 기능 및 미세 단위의 연관성 제어 기능을 내 웹사이트로 가져올 수 있도록 지원할까요? Elastic Site Search에서 제공하는 디자인 및 사용자 지정 옵션은 단순한 기본 제공 솔루션에서 완전히 사용자 지정 가능한 동적인 검색 환경에 이르기까지 다양합니다.

Site Search JavaScript 스니펫을 설치하고, 새 검색 필드를 만들거나 기존 검색 필드를 변경하면, 구성 가능한 기본 제공 Site Search 오버레이를 사용하여 검색 결과를 표시할 수 있습니다.

사용자 지정 디자인은 어떻게 하나요? Elastic Site Search에는 이를 위한 일련의 API가 포함되어 있습니다. Java, Node.js, Python, Ruby를 지원하는 자사 클라이언트가 있습니다. Elastic에서 검색 및 자동 완성형의 인기 있는 JavaScript 라이브러리를 제공하므로 이를 출발점으로 하여 고유하고 멋진 사용자 지정 환경을 구축할 수 있습니다.

Elastic Site Search가 가장 빛을 발하는 곳은 크롤러가 막중한 일을 수행해야 할 때입니다. 빠르게 시작할 수 있고, 원하는 대로 조정할 수 있으며, 항상 최신 결과를 보여줍니다. Elastic Site Search API 및 플러그인은 보완에 유용합니다. 그러나 일부 기능은 대시보드에서만 사용 가능하며 해당 API 엔드포인트가 없습니다.

더욱 심층적인 API 엔드포인트를 완전히 프로그래밍 방식으로 제어하려면 Elastic App Search를 소개해드립니다.

Elastic App Search: API 중심적, 인간 친화적

Elastic App Search는 API 중심적입니다. Ruby, JavaScript, Java, Node.js, Python에서 사용할 수 있는 자사 클라이언트가 있습니다. Elastic App Search는 크롤러를 활용하지 않습니다.

개발자는 Elastic App Search API를 사용하여 인덱싱할 개체 데이터를 생성할 방법 및 다양한 API 엔드포인트를 적용할 방법을 결정합니다. 수집, 결과 제공 및 전반적인 구현은 프로그래밍 방식으로 처리됩니다. 검색을 대화형 대시보드, 복잡한 웹 또는 모바일 애플리케이션, 게임 또는 스토어로 구축할 때, 프로그래밍을 할 수 있으면 개체를 검색 가능하게 만들 수 있습니다.

모든 대시보드 기능을 미세 단위의 강력한 API로 변환하여 애플리케이션 코드로 작성할 수 있습니다. 예를 들어, Elastic Site Search와 Elastic App Search에서 모두 동의어 집합을 만들 수 있습니다. 동의어 집합은 뛰어난 유틸리티입니다. 검색자들은 종종 매우 다른 단어를 사용합니다. 자동차(car)를 어떤 사용자는 차(jalopy), 차량(automobile) 등으로 부릅니다.

Elastic Site Search에서는 다음과 같이 대시보드를 통해 동의어를 적용할 수 있습니다.

Elastic App Search 대시보드에서도 동일하게 할 수 있습니다.

… 또는 다음과 같이 문서화가 잘 이루어진 API 엔드포인트를 요청할 수도 있습니다.

curl -X POST 'https://host-xxxxxx.api.swiftype.com/api/as/v1/engines/rent-a-car/synonyms' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer private-xxxxxxxxxxxxxxxxxxxx' \
-d '{
  "synonyms": ["car", "vehicle", "jalopy"]
}'

Elastic App Search API에서는 더욱 심층적으로 접근할 수 있습니다. 전자 상거래 플랫폼을 구축할 때 Analytics API Suite를 사용할 수 있는 방법을 고려해 보겠습니다. 검색은 자유로운 표현으로 시작하므로 여기에서 얻을 수 있는 분석 통찰력은 심오할 수 있습니다. Analytics Suite에서는 사용자 쿼리에 대한 정보를 반환하며 각 문서가 조정 가능한 기간 내에 받은 클릭 수를 표시할 수 있습니다.

curl -X POST 'https://host-2376rb.api.swiftype.com/api/as/v1/engines/sample-engine/analytics/queries' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer private-xxxxxxxxxxxxxxxxxxxxxxxx' \
-d '{
  "filters": {
    "date": {
      "from": "2018-06-15T12:00:00+00:00",
      "to": "2018-06-19T00:00:00+00:00"
    }
  }
}'

예를 들어, 스토어에서 판매한 제품이 밤새 인기 폭주 상품이 되었다면 어떻게 할까요? 갑자기 문서 검색 및 클릭이 폭발적으로 증가합니다. 이는 엄청난 비즈니스 기회일 수 있습니다! 이제 어떻게 할까요?

Analytics API를 사용하여 검색에서 가장 인기 있는 문서를 캡처하는 함수를 작성할 수 있습니다. 그런 다음 함수를 확장하여 인기 문서를 홈페이지에서 가장 눈에 잘 띄는 위치에 자동으로 게시하도록 할 수 있습니다. 사용자 검색은 수요를 나타내고, 자동화된 함수는 수요에 대해 실시간으로 최적화합니다. 분석이 심층적이고 유용한 반면, Elastic App Searh에서 가장 뛰어난 점은 검색 기능입니다.

문서 내의 스키마 필드는 텍스트, 숫자, 날짜, 지오로케이션의 네 가지 값 형식 중 하나일 수 있습니다. Elastic App Search에서는 모든 네 가지 유형에 대해 심층 검색 기능을 제공합니다. 지오로케이션이 인기를 얻고 있는 것은 당연합니다. 어떤 장소에 있거나 새로운 장소로 향하는 사용자가 근처에 무엇이 있나 알아보려고 합니다.

사용자 좌표를 사용하여 지리적 위치를 검색 쿼리로 작성하여 근접성에 근거하여 결과 연관성을 향상시킬 수 있습니다.

전 세계의 건강식 레스토랑 목록을 제공하는 모바일 애플리케이션이 있다고 합시다.

curl -X GET 'https://host-xxxxxx.api.swiftype.com/api/as/v1/engines/food-paradise/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-xxxxxxxxxxxxxxxxxxxxxx' \
-d '{
  "boosts": {
    "current_location": {
      "type": "proximity",
      "function": "linear",
      "center": "37.6213, -122.3790",
      "factor": 8
    }
  },
  "query": "sushi"
}'

스시에 대한 쿼리는 제공된 요소인 중심까지의 근접성에 따라 결과의 연관성 스코어를 증대시킵니다. 중심은 검색자로부터 받은 위치 데이터에 따라 정해집니다. 이를 통해 공간 정보가 있으므로 연관성이 매우 높은 결과를 제공할 수 있습니다.

Elastic App Search API의 심층도로만 가능한 세 번째 사례는 고급 그루핑입니다. 문서를 제공하는 사례를 가정해 보겠습니다. 제품 버전을 변경하면 문서 버전도 변경해야 할 것입니다.

curl -X GET 'https://host-2376rb.api.swiftype.com/api/as/v1/engines/sample-engine/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-o5bk7qpaedd2xmcsavb1d8os' \
-d '{
  "query": "meta tags",
  "result_fields": {
    "url": {
      "raw": {}
    },
    "title": {
      "raw": {}
    },
    "description": {
      "raw": {}
    },
    "version": {
      "raw": {}
    }
  },
  "group": {
    "field": "url"
  }
}'

사용자가 특정 기능을 검색하려고 할 때, 기능이 포함된 다른 문서 버전들을 어떻게 처리할까요? 그룹 쿼리를 사용하면 동일한 주제의 모든 별도 버전 페이지를 단일 검색 결과로 반환합니다. 사용자가 다른 버전의 수십 개 결과를 분석하는 대신, 단일 결과에서 원하는 버전을 선택하도록 할 수 있습니다.

Elastic App Search를 사용하면 방문자가 검색 필드에서 연관된 문서를 찾는 것보다 훨씬 더 심층적인 검색이 가능합니다. 검색이 기능적으로 이루어지는데, 사용자에게 문서가 있을 때 사용자 코드를 통해 지능형 방식으로 문서가 검색됩니다. 검색 필드의 중요한 컨텍스트가 필요 없이 검색하려는 대상을 기반으로 작업을 자동화할 수 있습니다.

얼핏 보면 Elastic App Search가 ‘매우 기술적인' 사용자를 위한 제품처럼 느껴질 수 있습니다. API가 유연하고 연관성 높은 검색을 찾고 있는 모든 개발자를 확실히 만족시킬 것은 분명합니다. 그러나 Elastic App Search는 사용자에게 인터페이스 작성과 인덱싱을 직접 할 수 있는 융통성을 제공함과 동시에, 대시보드 및 포함된 모든 유용한 기능들을 제공하여 모든 기술 수준의 사용자가 손쉽게 접근할 수 있도록 합니다.

요약

Elastic 솔루션은 사용자의 비즈니스 요구사항 충족을 도와줍니다. 고품질의 검색 환경을 웹사이트 또는 애플리케이션에 통합할 솔루션을 찾고 있다면, Elastic Site Search 또는 Elastic App Search 둘 중에 적합한 제품을 선택하시면 됩니다.

자세한 내용은 Elastic Site Search 또는 Elastic App Search 솔루션 페이지를 참조하세요. 두 솔루션 모두 14일간 무료 체험판을 제공하며 신용카드가 필요 없습니다.