Personnalisation d'Elastic App Search avec des résultats basés sur l'historique de recherche

Avec Elastic App Search, vous pouvez ajouter des expériences de recherche scalables et pertinentes sur l'ensemble de vos applications et de vos sites web. Pour vous aider, vous disposez de plusieurs options de personnalisation des résultats de recherche qui sont prêtes à l'emploi, comme les pondérations et les accélérateurs, ou encore les curations, pour ne citer qu'elles. Vous pouvez également ajouter une fonctionnalité du type Ces documents pourraient vous intéresser pour proposer aux utilisateurs d'autres contenus similaires aux documents qu'ils ont précédemment recherchés. Dans cet article, vous apprendrez à créer une fonctionnalité de ce type à l'aide des API robustes d'App Search.

Création du client de recherche

Le client de recherche se crée avec l'application frontend, comme c'est le cas d'habitude, à deux exceptions près (sauf pour la création de vues de suggestion réelle) :

  • Il est nécessaire de baliser chaque événement d'analyse à l'aide d'un ID utilisateur.
    • Par exemple, pour chaque recherche et chaque clic, vous enverrez alors un paramètre de balise d'analyse supplémentaire :
    • 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"] 
        } 
      }'
          
  • Lorsqu'une liste des résultats suggérés est nécessaire (requête de recherche, chargement de page, etc.), envoyez une requête au contrôleur externe.

Création du contrôleur externe

Le contrôleur externe correspond au service backend. Vous devez le créer pour générer la requête dont vous vous servirez pour remplir une liste des documents en fonction des recherches précédentes effectuées par un utilisateur. Sur demande, le contrôleur externe devrait effectuer les tâches suivantes :

  1. Obtenir les termes sur lesquels l'utilisateur a précédemment effectué des recherches :
    1. Appeler l'API analytique d'App Search afin d'obtenir une liste des n premières requêtes sur une plage temporelle m filtrée en fonction de la balise correspondant à l'ID de l'utilisateur. Voici un exemple de résultat, qui présente les 20 premières requêtes exécutées sur les deux derniers mois de 2020 par l'utilisateur dont la balise est 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. (Facultatif) Il est possible d'exclure des documents ayant été renvoyés par les résultats de recherche si, par exemple, vous souhaitez promouvoir un contenu ou des produits nouveaux auprès de l'utilisateur. Identifier les documents sur lesquels l'utilisateur a cliqué et les exclure :
    1. Appeler l'API analytique d'App Search pour obtenir une liste des documents sur lesquels l'utilisateur a cliqué, filtrée à l'aide de son identifiant.
  3. Générer les documents suggérés :
    1. Émettre une requête à recherche multiple vers l'API de recherche d'App Search à l'aide des termes de recherche générés à l'étape 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. (Facultatif) Ajouter un filtre à cette requête pour exclure les documents sur lesquels l'utilisateur a déjà cliqué (généré à l'étape 2).
    4. Renvoyer les résultats de cette requête au client.

FAQ et autres considérations

Voici une liste des questions fréquentes et autres aspects à considérer lors de la création.

Puis-je me servir de cette procédure pour une segmentation autre que les utilisateurs individuels ?

Oui ! Vous pouvez vous servir de la segmentation que vous préférez. La clé, ce sont les balises. Les balises utilisent les chaînes que vous définissez. Il peut s'agir d'un utilisateur, d'une région géographique ou de toute autre cohorte que vous pouvez définir en fonction de ce que vous savez sur l'utilisateur. 

Mais rappelez-vous que ces balises doivent être définies par événement de recherche et par événement de clic. Si vous décidez de changer par la suite et que vous ne loggez pas ces données, vous devrez tout recommencer ou inférer les cohortes d'une autre manière.

Et si je veux afficher des résultats de recherche basés sur d'autres données utilisateur arbitraires que je possède ?

C'est possible. Tant que vous pouvez convertir ces données en termes de requêtes, vous pouvez modifier le contrôleur externe pour inclure ces résultats de recherche également.

Comment puis-je affiner cette fonctionnalité ?

En dehors des paramètres existants de réglage de la pertinence, vous pouvez affiner vos résultats de plusieurs façons :

  • en limitant le nombre de requêtes utilisateur de manière plus stricte ;
  • en limitant la plage temporelle des requêtes utilisateur de manière plus stricte ;
  • en limitant le nombre total de résultats renvoyés à partir d'une requête à plusieurs recherches.

Pourquoi ne puis-je pas procéder ainsi au niveau du frontend ?

Vous le pourriez si votre client dispose d'une liste des requêtes de l'utilisateur, et éventuellement des documents en sa possession, par exemple avec un cookie. Toutefois, n'oubliez pas que des clés privées sont nécessaires pour accéder à l'API analytique. Attention à ne pas les exposer.

Étapes suivantes

Vous avez envie de vous lancer et de créer cette fonctionnalité basée sur l'historique de recherche ? Dans ce cas, essayez gratuitement App Search sur Elastic Cloud (ou téléchargez-en une version autogérée). Vous avez des questions ? Vous souhaitez nous informer de l'avancement de votre projet ? N'hésitez pas à nous contacter sur nos forums de discussion.