De zoekervaring verbeteren door resultaten te ordenen op afstand van een bepaald referentiepunt
Vaak willen gebruikers zoeken naar items die zijn gekoppeld aan een geografische locatie. Ze willen bijvoorbeeld de dichtstbijzijnde koffiebar vinden op hun locatie. Ai Search bevat georuimtelijke functies die u in query's kunt aanroepen om locaties op het aardoppervlak te vergelijken.
Hier leert u hoe u kunt zoeken naar dingen die zich in de buurt van een fysiek punt of in een begrensd gebied bevinden.
Wat zijn georuimtelijke functies?
In eerdere lessen in deze module hebt u gezien hoe gebruikers een hotel kunnen vinden door velden op te geven die moeten worden gezocht, zoals Description
en Category
:
search=(Description:luxury OR Category:luxury)&$select=HotelId, HotelName, Category, Tags, Description&$count=true
Een belangrijke overweging bij het boeken van een hotel is de geografische locatie. Als u bijvoorbeeld een reis boekt om de Eiffeltoren te zien, wilt u een hotel in de buurt.
Als u AI Search wilt vragen om resultaten te retourneren op basis van hun locatiegegevens, kunt u twee functies in uw query gebruiken:
geo.distance
. Deze functie retourneert de afstand in een rechte lijn over het aardoppervlak vanaf het punt dat u opgeeft tot de locatie van het zoekresultaat.geo.intersects
. Deze functie retourneerttrue
als de locatie van een zoekresultaat zich in een veelhoek bevindt die u opgeeft.
Als u deze functies wilt gebruiken, moet u ervoor zorgen dat uw index de locatie voor resultaten bevat. Locatievelden moeten het gegevenstype Edm.GeographyPoint
hebben en de breedte- en lengtegraad opslaan.
De functie geo.distance gebruiken
geo.distance
is een functie die twee punten als parameters neemt en de afstand tussen deze punten in kilometers retourneert.
Stel dat u op zoek bent naar een hotel in de buurt van de Eiffeltoren. U kunt de bovenstaande query wijzigen en een nieuw filter toevoegen:
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
Deze query retourneert alle luxe hotels in de index binnen vijf kilometer van de Eiffeltoren. In de query:
Location
is de naam van het veld waarin de locatie van het hotel wordt opgeslagen.geography'POINT(2.294481 48.858370)'
is de locatie van de Eiffeltoren als lengtegraad en breedtegraad.le 5
geeft aan dat hotels in de resultaten moeten worden opgenomen als degeo.distance
functie een getal retourneert dat kleiner is dan of gelijk is aan vijf kilometer.
Belangrijk
Wanneer u in een filter gebruikt geo.distance
, worden de operatoren die gelijk zijn aan (eq
) en niet gelijk aan (ne
) niet ondersteund. Gebruik in plaats daarvan lt
, le
of gt
ge
.
Omdat geo.distance
de afstand in kilometers wordt geretourneerd, kunt u deze ook in een orderby
component gebruiken. Deze query retourneert bijvoorbeeld alle luxe hotels in de index, maar de hotels die het dichtst bij de Eiffeltoren liggen, worden als eerste weergegeven:
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 deze query asc
geeft u aan dat de luxe hotels worden geretourneerd in oplopende volgorde van hun afstand van de Eiffeltoren.
De functie geo.intersects gebruiken
Stel dat u hebt besloten dat u wilt verblijven in het zevende arrondissement van Parijs voor uw reis naar de Eiffeltoren. Wanneer u een hotel zoekt, wilt u dit gebied zo nauwkeurig mogelijk opgeven. U kunt een dergelijke query formuleren met behulp van de geo.intersects
functie.
De geo.intersects
functie vergelijkt een locatie met een veelhoek op het aardoppervlak, die u opgeeft met drie of meer punten. Met behulp van een veelhoek kunt u een shape maken die nauw overeenkomt met een gebied, zoals een arrondissement. Gebruik deze veelhoek om een geografisch filter toe te voegen aan uw query:
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
Deze query retourneert alle luxe hotels binnen een plein rond de Eiffeltoren. U kunt meer dan vier punten gebruiken om een nauwkeuriger gebied te maken.
Belangrijk
In veelhoeken moet u de punten opgeven in rechtsomvolgorde en moet de veelhoek worden gesloten, wat betekent dat de eerste en laatste punten die zijn opgegeven, hetzelfde moeten zijn.
geo.intersects
retourneert een Booleaanse waarde, dus het is niet mogelijk om deze te gebruiken in een orderby
component.