검색 기록 기반 결과를 사용하여 Elastic App Search 개인화

Elastic App Search를 사용하면 확장 가능한 관련 검색 환경을 모든 앱과 웹사이트에 추가할 수 있습니다. 가중치, 부스트큐레이션과 같은 다양한 검색 결과 개인화 옵션을 즉시 제공합니다. 또한 이전에 검색한 문서와 유사한 추가 콘텐츠를 사용자에게 노출시키는 "These documents might also interest you(관심을 가지실 만한 문서)" 기능을 추가할 수도 있습니다. 이 포스팅에서는 강력한 App Search API를 사용하여 이 기능을 만드는 과정을 단계별로 안내합니다.

검색 클라이언트 구축

검색 클라이언트는 두 가지 추가 요구 사항을 제외하고 평소와 같이 프런트 엔드 애플리케이션을 사용하여 구축됩니다(실제 제안 보기 작성 제외).

  • 사용자 ID로 각 분석 이벤트에 태그를 지정합니다.
    • 예를 들어, 각 쿼리 및 클릭마다 추가 분석 태그 매개 변수를 보냅니다.
    • curl -X GET 'https://154d5f7d80774345fg92c8381891faf7.ent-search.us-east-1.aws.cloud.es.io/api/as/v1/engines/national-parks-demo/search' \ 
      -H 'Content-Type: application/json' \ 
      -H 'Authorization: Bearer search-soaewu2ye6uc45dr8mcd54v8' \ 
      -d '{ 
        "query": "everglade", 
        "analytics": { 
          "tags": ["UNIQUE_USER_ID"] 
        } 
      }'
          
  • 제안된 결과 목록(검색 요청, 페이지 로드 등)이 필요할 경우, 외부 컨트롤러로 요청을 시작합니다.

외부 컨트롤러 구축

외부 컨트롤러는 백 엔드 서비스입니다. 사용자의 이전 검색을 기반으로 문서 목록을 채우는 데 사용할 수 있는 쿼리를 생성하려면 이 쿼리를 만들어야 합니다. 요청 시 외부 컨트롤러는 다음을 수행해야 합니다.

  1. 사용자가 이전에 검색한 용어를 가져옵니다.
    1. App Search 분석 API를 호출하여 해당 사용자 ID로 필터링된 m 시간 범위에 대한 상위 n개 쿼리 목록을 태그로 지정합니다. 다음은 UNIQUE_USER_ID 태그가 지정된 사용자에 대해 2020년 마지막 두 달 동안 상위 20개 쿼리를 반환하는 예입니다.
    2. curl -X GET 'https://154d5f7d80774345fg92c8381891faf7.ent-search.us-east-1.aws.cloud.es.io/api/as/v1/engines/national-parks-demo/analytics/queries' \ 
      -H 'Content-Type: application/json' \ 
      -H 'Authorization: Bearer private-xxxxxxxxxxxxxxxxxxxxxxxx' \ 
      -d '{ 
        "filters": {  
          "all": [ 
            { 
              "date": { 
                "from": "2020-10-31T12:00:00+00:00" 
                "to": "2020-12-31T00:00:00+00:00" 
              } 
            }, { 
              "tag": "UNIQUE_USER_ID" 
            } 
          ] 
        }, 
        "page": { 
          "size": 20 
        } 
      }'
          
  2. (선택 사항) 예를 들어, 사용자에게 새로운 내용이나 제품을 홍보하려는 경우, 검색 결과를 통해 발견된 문서를 제외할 수 있습니다. 다음과 같이 사용자가 클릭했던 문서를 찾아 제외합니다.
    1. 사용자 ID별로 필터링된 클릭된 문서의 목록을 보려면 App Search 분석 API를 호출합니다.
  3. 제안된 문서를 생성합니다.
    1. 1단계에서 생성된 검색어를 사용하여 App Search API에 다중 검색 쿼리를 실행합니다.
    2. curl -X POST 'https://154d5f7d80774345fg92c8381891faf7.ent-search.us-east-1.aws.cloud.es.io/api/as/v1/engines/national-parks-demo/multi_search' \ 
      -H 'Content-Type: application/json' \ 
      -H 'Authorization: Bearer search-soaewu2ye6uc45dr8mcd54v8' \ 
      -d '{ 
        "queries": [ 
          {"query": "california"}, 
          {"query": "florida"} 
        ] 
      }'
              
    3. (선택 사항) 사용자가 이미 클릭한 문서(2단계에서 생성)를 제외하려면 해당 쿼리에 필터를 추가합니다.
    4. 해당 쿼리 결과를 클라이언트에 반환합니다.

FAQ 및 추가 고려 사항

다음은 구축할 때 고려해야 할 질문과 기타 사항 목록입니다.

개별 사용자 이상의 다른 세분화에도 이 기능을 사용할 수 있나요?

그렇습니다! 원하는 세분화 방법에 따라 이 옵션을 사용할 수 있습니다. 태그가 핵심입니다. 태그는 여러분이 정의하는 스트링을 사용하여 사용자별로, 지리적 영역별로 또는 여러분이 사용자에 대해 알고 있는 내용을 기반으로 정의할 수 있는 모든 다른 코호트를 기준으로 정의할 수 있습니다. 

그러나 이러한 태그는 검색 이벤트와 클릭 이벤트로 정의해야 합니다. 나중에 데이터를 변경하기로 선택하는 경우, 해당 데이터를 로깅하지 않으면 다시 시작하거나 다른 방법으로 코호트를 추론해야 합니다.

보유한 다른 임의 사용자 데이터를 기준으로 검색 결과를 표시하려면 어떻게 해야 하나요?

좋은 생각이네요! 데이터를 쿼리 용어로 변환할 수 있는 한, 외부 컨트롤러도 이러한 검색 결과를 포함하도록 수정할 수 있습니다.

이 기능을 조정하려면 어떻게 해야 하나요?

기존 정확도 조정 설정 외에도, 다음과 같은 몇 가지 방법으로 결과를 구체화할 수 있습니다.

  • 반환되는 사용자 쿼리 수를 보다 엄격하게 제한
  • 반환되는 사용자 쿼리의 시간 범위를 보다 엄격하게 제한
  • 다중 검색 쿼리에서 반환되는 총 결과 제한

왜 프런트 엔드에서는 이렇게 할 수 없나요?

클라이언트가 사용자의 쿼리 목록과 선택적으로 문서를 가지고 있는 경우(예를 들어, 쿠키 포함), 가능합니다. 분석 API 액세스에는 개인 키가 필요하다는 것만 잊지 마세요. 그리고 이 개인 키는 절대 다른 누구에게도 알려주시면 안됩니다.

다음 단계

이 검색 기록 기반 기능을 구축하기 위해 실험을 하려는 경우, Elastic Cloud의 App Search 무료 체험판을 실행하세요. (또는 다운로드하여 자체 관리하실 수도 있습니다.) 질문이 있거나 프로젝트 진행 상황을 저희에게 알려주고 싶으시면 토론 포럼에 글을 올려주세요.