Engineering

Personalisieren von Elastic App Search mit Ergebnissen auf der Basis des Suchverlaufs

Mit Elastic App Search können Sie alle Ihre Anwendungen und Websites mit skalierbaren, relevanten Sucherlebnissen versehen. Die Lösung bietet eine Vielzahl vorkonfigurierter Möglichkeiten zur Personalisierung von Suchergebnissen, darunter Gewichtungen und Boosts sowie Kuratierungen. Außerdem können Sie Ihren Nutzern eine Funktion wie Diese Dokumente könnten Sie auch interessieren bereitstellen, mit der dem Nutzer auf der Basis seiner vorherigen Suchen weitere Inhalte präsentiert werden. In diesem Blogpost zeigen wir Ihnen, wie Sie solche Funktionen mithilfe der robusten App Search-APIs erstellen können.

Erstellen des Such-Clients

Der Such-Client wird wie üblich mit der Front-end-Anwendung erstellt. Abgesehen vom Erstellen der eigentlichen Vorschlagsansichten gelten dabei aber zwei zusätzliche Bedingungen:

  • Jedes Analytics-Ereignis muss mit einer Nutzer-ID getaggt werden.
    • So muss jede Abfrage und jeder Klick mit einem zusätzlichen Analytics-Tags-Parameter versehen werden:
    • 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"] 
        } 
      }'
          
  • Wenn eine Liste der vorgeschlagenen Ergebnisse benötigt wird (Suchanfrage, Laden einer Seite usw.), muss eine Anfrage an den externen Controller gesendet werden.

Erstellen des externen Controllers

Der externe Controller ist der Back-end-Dienst. Dieser muss erstellt werden, um die Abfrage zu generieren, mit der Sie dann anhand der bisherigen Suchen des Nutzers eine Liste von Dokumenten befüllen können. Bei Anforderung muss der externe Controller Folgendes tun:

  1. Abrufen der Begriffe, die der Nutzer zuvor als Suchbegriffe eingegeben hat:
    1. Rufen Sie die App Search Analytics-API auf, um eine Liste der Top‑n-Abfragen für den Zeitraum m gefiltert nach der betreffenden Nutzer-ID als Tag zu erhalten. Im folgenden Beispiel werden die Top‑20-Abfragen der letzten zwei Monate des Jahres 2020 für den Nutzer mit dem Tag UNIQUE_USER_ID zurückgegeben:
    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. (Optional) Ausschließen von Dokumenten, die über Suchergebnisse gefunden wurden. So lassen sich beispielsweise Inhalte oder Produkte bewerben, bei denen die Wahrscheinlichkeit höher ist, dass sie für den Nutzer neu sind. Dazu müssen die Dokumente gefunden werden, auf die der Nutzer bereits geklickt hat, um sie auszuschließen:
    1. Rufen Sie die App Search Analytics-API auf, um eine Liste der angeklickten Dokumente gefiltert nach Nutzer-ID zu erhalten.
  3. Generieren von Dokumentvorschlägen:
    1. Senden Sie unter Verwendung der in Schritt 1 generierten Suchbegriffe eine Mehrfachsuchanfrage an die 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. (Optional) Fügen Sie dieser Abfrage einen Filter hinzu, um die (in Schritt 2 generierten) Dokumente auszuschließen, die der Nutzer bereits angeklickt hat.
    4. Geben Sie die Ergebnisse dieser Abfrage an den Client zurück.

FAQ und weitere Überlegungen

Beim Erstellen sollten Sie die folgenden Fragen und Aspekte bedenken.

Kann ich diese Vorgehensweise auch für andere Segmentierungen statt nur einzelne Nutzer verwenden?

Ja, das geht. Sie können diese Vorgehensweise für jede gewünschte Segmentierungsmethode verwenden. Wichtig sind die Tags. Tags verwenden Zeichenfolgen, die Sie definieren. Sie können also nach Nutzer, nach geografischer Region oder nach jeder anderen Kohorte segmentieren, je nachdem, was Sie über den Nutzer wissen. 

Denken Sie aber daran: Diese Tags müssen nach Suchereignis und nach Klickereignis definiert werden. Wenn Sie später Änderungen vornehmen möchten und diese Daten nicht in Logs aufzeichnen, müssen Sie von vorn anfangen oder Kohorten anderweitig ableiten.

Was, wenn ich Suchergebnisse anhand anderer mir vorliegender Nutzerdaten anzeigen lassen möchte?

Kein Problem! Sofern sich diese Daten in Abfragebegriffe umwandeln lassen, können Sie den externen Controller so bearbeiten, dass er auch diese Suchergebnisse einschließt.

Wie kann ich diese Funktion tunen?

Über Ihre vorhandenen Relevanz-Tuning-Einstellungen hinaus können Sie die Ergebnisse wie folgt einschränken:

  • Sie können die Zahl der zurückgegebenen Nutzerabfragen stärker begrenzen
  • Sie können den Zeitraum der zurückgegebenen Nutzerabfragen stärker begrenzen
  • Sie können die von der Mehrfachabfrage zurückgegebenen Gesamtergebnisse begrenzen

Warum kann ich das nicht mit der Front-end-Anwendung machen?

Das ist möglich, wenn Ihr Client eine Liste der Nutzerabfragen hat und optional die Dokumente – z. B. über ein Cookie – zur Hand hat. Denken Sie aber daran, dass für den Zugriff auf die Analytics-API private Schlüssel erforderlich sind, die Sie nie weitergeben sollten.

Wie gehts weiter?

Wenn Sie mit dem Erstellen dieser auf dem Suchverlauf basierenden Funktion experimentieren möchten, können Sie eine kostenlose Testversion von App Search auf Elastic Cloud nutzen (oder Elastic Enterprise Search herunterladen und die Lösung selbst verwalten). Wenn Sie Fragen haben oder uns mitteilen möchten, wie Ihr Projekt vorangeht, können Sie unsere Diskussionsforen nutzen.