Engineering

Personalização do Elastic App Search com resultados baseados no histórico de busca

Com o Elastic App Search, você pode adicionar experiências de busca escaláveis e relevantes a todos os seus apps e websites. Ele oferece uma série de opções de personalização de resultados de busca prontas para usar, como pesos e boosts e curadoria. Você também pode adicionar um recurso do tipo “Estes documentos podem ser de seu interesse”, que revelaria conteúdo adicional para os usuários, semelhante aos documentos que eles buscaram anteriormente. Este post mostra o processo de criação desse recurso usando as robustas APIs do App Search.

Construção do cliente de busca

O cliente de busca é construído com a aplicação de frontend como de costume, exceto por dois requisitos adicionais (além da criação das visualizações de sugestões efetivas):

  • Marque cada evento de analítica com um ID de usuário.
    • Por exemplo, para cada consulta e clique, você enviaria um parâmetro adicional de tags de analítica:
    • 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"] 
        } 
      }'
          
  • Quando uma lista de resultados sugeridos for necessária (solicitação de busca, carregamento de página etc.), dispare uma solicitação para o controlador externo.

Construção do controlador externo

O controlador externo é o serviço de backend. Você teria de construir isso para gerar a consulta usada para preencher uma lista de documentos com base nas buscas anteriores desse usuário. Mediante a solicitação, o controlador externo precisaria fazer o seguinte:

  1. Obter os termos que o usuário tinha buscado anteriormente:
    1. Chame a API de analítica do App Search para obter uma lista das n principais consultas em um intervalo de tempo m, filtrada por esse ID de usuário como uma tag. Aqui está um exemplo que retorna as 20 principais consultas nos últimos dois meses de 2020 para o usuário marcado como UNIQUE_USER_ID.
    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. (Opcional) Será possível excluir documentos que foram encontrados por meio dos resultados de busca se, por exemplo, você quiser promover conteúdo ou produtos com maior probabilidade de serem novos para o usuário. Encontre os documentos nos quais o usuário havia clicado e exclua-os:
    1. Chame a API de analítica do App Search para obter uma lista dos documentos clicados, filtrada por ID do usuário.
  3. Gere os documentos sugeridos:
    1. Emita uma consulta de busca múltipla para a API de busca do App Search usando os termos de busca gerados na etapa 1.
    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. (Opcional) Adicione um filtro a essa consulta para excluir os documentos nos quais o usuário já clicou (gerados na etapa 2).
    4. Retorne os resultados dessa consulta ao cliente.

Perguntas frequentes e considerações adicionais

Aqui está uma lista de perguntas e outras coisas a considerar enquanto você constrói.

Posso usar isso para outra segmentação além de usuários individuais?

Sim! Você pode usar isso em qualquer método de segmentação de sua preferência. O segredo são as tags. As tags usam strings que você define, portanto, podem ser por usuário, por região geográfica ou qualquer outra coorte que você possa definir com base no que sabe sobre o usuário. 

Mas lembre-se: essas tags precisam ser definidas por evento de busca e por evento de clique. Se decidir alterá-lo no futuro e não estiver registrando esses dados, você precisará reiniciar ou inferir as coortes de outra forma.

E se eu quiser exibir os resultados da busca com base em algum outro dado arbitrário do usuário que eu tiver?

Ótimo! Contanto que você possa converter esses dados em termos de consulta, poderá modificar o controlador externo para incluir esses resultados da busca também.

Como eu posso ajustar esse recurso?

Além das configurações de ajuste de relevância existentes, você pode aprimorar os resultados de algumas maneiras:

  • Limitar o número de consultas do usuário retornadas de forma mais estrita
  • Limitar o intervalo de tempo das consultas do usuário retornadas de forma mais estrita
  • Limitar o total de resultados retornados da consulta de busca múltipla

Por que eu não posso fazer isso no frontend?

Você poderia se o seu cliente tivesse uma lista das consultas do usuário e, opcionalmente, documentos em mãos — por exemplo, com um cookie. Só não se esqueça de que são necessárias chaves privadas para o acesso à API de analítica, que você nunca gostaria de expor.

Próximas etapas

Se quiser experimentar a construção desse recurso baseado no histórico de busca, você poderá iniciar uma avaliação gratuita do App Search no Elastic Cloud (ou poderá baixar a versão autogerenciada). Se tiver alguma dúvida ou quiser nos informar sobre o andamento do seu projeto, escreva para nós em nossos fóruns de discussão.