Verbessern der Sucherfahrung durch Sortieren der Ergebnisse nach Entfernung von einem bestimmten Referenzpunkt

Abgeschlossen

Benutzer suchen häufig nach Elementen, die einem bestimmten geografischen Standort zugeordnet sind. Zum Beispiel könnten sie nach einem Café suchen, das sich in der Nähe ihres Standorts befindet. Um Ihnen den Vergleich von geografischen Standorten zu erleichtern, enthält die KI-Suche georäumliche Funktionen, die Sie in Abfragen aufrufen können.

Hier erfahren Sie, wie Sie nach Dingen suchen können, die sich in der Nähe eines physischen Standorts oder innerhalb eines eingegrenzten Bereichs befinden.

Was sind georäumliche Funktionen?

In den vorangegangenen Lerneinheiten dieses Moduls haben Sie erfahren, wie Benutzer den Standort eines Hotels ermitteln können, indem Sie Felder wie z. B. Description und Category bei der Suche angeben:

search=(Description:luxury OR Category:luxury)&$select=HotelId, HotelName, Category, Tags, Description&$count=true

Ein wichtiger Aspekt bei der Buchung eines Hotels ist seine geografische Lage. Wenn Sie zum Beispiel eine Reise zur Besichtigung des Eiffelturms planen, möchten Sie in der Regel ein Hotel in der Nähe buchen.

Um die KI-Suche anzuweisen, Ergebnisse auf der Grundlage von Standortinformationen zurückzugeben, können Sie zwei Funktionen in Ihrer Abfrage verwenden:

  • geo.distance. Diese Funktion gibt die Entfernung als Luftlinie zwischen dem von Ihnen angegebenen Punkt und der Position des Suchergebnisses zurück.
  • geo.intersects. Diese Funktion gibt true zurück, wenn die Position eines Suchergebnisses innerhalb eines von Ihnen angegebenen Polygons liegt.

Wenn Sie diese Funktionen verwenden möchten, stellen Sie sicher, dass Ihr Index den Standort für die Ergebnisse enthält. Standortfelder müssen den Datentyp Edm.GeographyPoint aufweisen und den Breiten- und Längengrad speichern.

Verwenden der Funktion „geo.distance“

geo.distance ist eine Funktion, die zwei Punkte als Parameter akzeptiert und gibt die Entfernung zwischen diesen beiden Punkten in Kilometern zurückgibt.

Angenommen, Sie suchen ein Hotel in der Nähe des Eiffelturms. Sie können die obige Abfrage abändern, indem Sie einen neuen Filter hinzufügen:

search=(Description:luxury OR Category:luxury)$filter=geo.distance(location, geography'POINT(-122.131577 47.678581)') le 5&$select=HotelId, HotelName, Category, Tags, Description&$count=true

Diese Abfrage gibt alle Luxushotels im Index zurück, die weniger als fünf Kilometer vom Eiffelturm entfernt sind. In der Abfrage gilt Folgendes:

  • Location ist der Name des Felds, das den Standort des Hotels speichert.
  • geography'POINT(2.294481 48.858370)' gibt den Standort des Eiffelturms als Längen- und Breitengrad an.
  • le 5 gibt an, dass Hotels in die Ergebnisse aufgenommen werden sollen, wenn die Funktion geo.distance eine Zahl kleiner oder gleich fünf Kilometer ergibt.

Wichtig

Wenn Sie geo.distance in einem Filter verwenden, werden der Gleichheitsoperator (eq) und der Ungleichheitsoperator (ne) nicht unterstützt. Verwenden Sie stattdessen lt, le, gt oder ge.

Da geo.distance die Entfernung in Kilometern zurückgegeben wird, können Sie sie auch in einer orderby-Klausel verwenden. Diese Abfrage gibt zum Beispiel alle Luxushotels im Index zurück, aber listet die Hotels mit der geringsten Entfernung zum Eiffelturm zuerst auf:

search=(Description:luxury OR Category:luxury)&orderby=geo.distance(Location, geography'POINT(2.294481 48.858370)') asc&$select=HotelId, HotelName, Category, Tags, Description&$count=true

In dieser Abfrage gibt asc an, dass die Luxushotels in aufsteigender Reihenfolge ihrer Entfernung zum Eiffelturm zurückgegeben werden sollen.

Verwenden der Funktion „geo.intersects“

Angenommen, Sie möchten für Ihren Ausflug zum Eiffelturm im siebten Arrondissement von Paris übernachten. Bei der Hotelsuche möchten Sie diesen Bereich so genau wie möglich angeben. Sie können eine solche Abfrage mit der Funktion geo.intersects formulieren.

Die Funktion geo.intersects vergleicht einen Standort mit einem Polygon auf der Erdoberfläche, das Sie mit drei oder mehr Punkten angeben. Mithilfe eines Polygons können Sie eine Form erstellen, die möglichst genau einem bestimmten Gebiet entspricht, z. B. einem Arrondissement. Verwenden Sie dieses Polygon, um Ihrer Abfrage einen geografischen Filter hinzuzufügen:

search=(Description:luxury OR Category:luxury) AND geo.intersects(Location, geography'POLYGON((2.32 48.91, 2.27 48.91, 2.27 48.60, 2.32 48.60, 2.32 48.91))')&$select=HotelId, HotelName, Category, Tags, Description&$count=true

Diese Abfrage gibt sämtliche Luxushotels innerhalb eines Quadrats um den Eiffelturm zurück. Sie können mehr als vier Punkte verwenden, um einen präziseren Bereich zu erstellen.

Wichtig

Bei Polygonen müssen Sie die Punkte gegen den Uhrzeigersinn angeben und das Polygon muss geschlossen sein, d. h. der erste und der letzte angegebene Punkt müssen identisch sein.

geo.intersects gibt einen booleschen Wert zurück und kann daher nicht in einer orderby-Klausel verwendet werden.