Ingeniería

Personalización de Elastic App Search con resultados basados en el historial de búsqueda

Con Elastic App Search, puedes agregar experiencias de búsqueda relevantes y escalables en todas tus aplicaciones y sitios web. Esta solución ofrece un host de opciones de personalización de resultados de búsqueda listas para usar, como ponderaciones y mejoras, y curaciones. También podrías agregar una característica de documentos que quizá también encuentres interesantes, que revelaría contenido adicional para los usuarios, similar a los documentos que ya buscaron. En este blog, harás un recorrido por el proceso de creación de esta capacidad usando las API de App Search robustas.

Creación del cliente de búsqueda

El cliente de búsqueda se crea con la aplicación de frontend, como de costumbre, excepto por dos requisitos adicionales (además de crear las vistas de sugerencias en sí):

  • Etiqueta cada evento de analíticas con una ID de usuario.
    • Por ejemplo, para cada búsqueda y clic, deberías enviar un parámetro de etiquetas de analíticas adicional:
    • 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"] 
        } 
      }'
          
  • Cuando se necesita una lista de los resultados sugeridos (solicitud de búsqueda, carga de página, etc.), envía una solicitud al controlador externo.

Creación del controlador externo

El controlador externo es el servicio de backend. Tendrías que crearlo para generar una búsqueda que puedas usar para completar una lista de documentos según las búsquedas anteriores de ese usuario. A pedido, el controlador externo debería hacer lo siguiente:

  1. Obtener los términos que el usuario buscó previamente:
    1. Llama a la API de analíticas de App Search para obtener una lista de las n búsquedas principales en un período m filtrada por la ID de ese usuario como una etiqueta. Este es un ejemplo que devuelve las 20 búsquedas principales de los últimos dos meses del 2020 correspondientes al usuario con la etiqueta 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) Es posible excluir documentos que se hallaron en los resultados de búsqueda si, por ejemplo, desearas promover contenido o productos que más probablemente sean nuevos para el usuario. Encuentra los documentos en los que el usuario hizo clic y, para excluirlos, haz lo siguiente:
    1. Llama a la API de analíticas de App Search para obtener una lista de los documentos en los que se hizo clic filtrados por la ID de usuario.
  3. Genera documentos sugeridos:
    1. Emite una consulta de búsqueda múltiple a la API de búsqueda de App Search con los términos de búsqueda generados en el paso 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) Agrega un filtro a esa búsqueda para excluir los documentos en los que el usuario ya hizo clic (generados en el paso 2).
    4. Devuelve los resultados de esa búsqueda al cliente.

Preguntas frecuentes y consideraciones adicionales

Esta es una lista de preguntas y demás cuestiones que debes considerar durante la creación.

¿Puedo usar esto para otra segmentación más allá de solo usuarios individuales?

Sí. Puedes usarlo en el método de segmentación que prefieras. Las etiquetas son la clave. Las etiquetas usan cadenas que tú defines; pueden ser por usuario, por región geográfica o cualquier otro cohorte que puedas definir en función de lo que sabes acerca del usuario. 

Pero recuerda que esas etiquetas deben estar definidas por evento de búsqueda y por evento de clic. Si decides hacer cambios en el futuro y no registras esos datos, tendrás que volver a comenzar o inferir los cohortes de otro modo.

¿Y si deseo mostrar los resultados de búsqueda según otros datos de usuario arbitrarios que poseo?

Eso está perfecto. Siempre y cuando puedas convertir esos datos en términos de búsqueda, puedes modificar el controlador externo para que incluya esos resultados de búsqueda también.

¿Cómo puedo ajustar esta característica?

Además de las configuraciones de ajustes de relevancia existentes, puedes recurrir a otros métodos para afinar los resultados:

  • Limitar con más rigurosidad la cantidad de búsquedas del usuario que se devuelven
  • Limitar con más rigurosidad el período de las búsquedas del usuario que se devuelven
  • Limitar el total de resultados que se devuelven a partir de la consulta multibúsqueda

¿Por qué no puedo hacer esto en el frontend?

Podrías hacerlo si el cliente tiene una lista de las búsquedas del usuario y, opcionalmente, documentos a mano (por ejemplo, con una cookie). No olvides que se requieren claves privadas para el acceso de la API de analíticas, y eso es algo que nunca querrías exponer.

Pasos siguientes

Si deseas experimentar con la creación de esta característica basada en el historial de búsqueda, puedes activar una prueba gratuita de App Search en Elastic Cloud (o puedes optar por la descarga y autogestión). Si tienes preguntas o te gustaría comentarnos el progreso de tu proyecto, contáctanos a través de nuestros foros de debate.