A keresési élmény javítása az eredmények egy adott referenciaponttól való távolság alapján történő megrendelésével
A felhasználók gyakran keresnek földrajzi helyhez társított elemeket. Előfordulhat például, hogy a legközelebbi kávézót szeretnék megtalálni a tartózkodási helyükhöz. A Föld felszínén található helyek összehasonlításához az AI Search geo-térbeli függvényeket tartalmaz, amelyeket lekérdezésekben hívhat meg.
Itt megtudhatja, hogyan kereshet olyan dolgokat, amelyek egy fizikai pont közelében vagy egy határolt területen belül találhatók.
Mik azok a térbeli függvények?
A modul korábbi egységeiben láthatta, hogyan kereshetnek a felhasználók egy szállodát a keresendő mezők megadásával, például Description
Category
:
search=(Description:luxury OR Category:luxury)&$select=HotelId, HotelName, Category, Tags, Description&$count=true
A szálloda foglalásakor fontos szempont a földrajzi hely. Ha például az Eiffel-torony megtekintésére foglal egy utazást, akkor a közelében szeretne egy szállodát elhelyezni.
Ha meg szeretné kérni az AI Searcht, hogy a helyadatok alapján adja vissza az eredményeket, két függvényt használhat a lekérdezésben:
geo.distance
. Ez a függvény egy egyenes vonalban adja vissza a Föld felszínén a megadott ponttól a keresési eredmény helyének távolságát.geo.intersects
. Ez a függvény akkor ad visszatrue
értéket, ha a keresési eredmény helye egy ön által megadott sokszögben található.
A függvények használatához győződjön meg arról, hogy az index tartalmazza az eredmények helyét. A helymezőknek rendelkezniük kell az adattípusokkal Edm.GeographyPoint
, és tárolniuk kell a szélességet és a hosszúságot.
A geo.distance függvény használata
geo.distance
egy függvény, amely paraméterekként két pontot vesz igénybe, és kilométerben adja vissza a köztük lévő távolságot.
Tegyük fel, hogy az Eiffel-torony közelében keres egy szállodát. A fenti lekérdezést módosíthatja egy új szűrő hozzáadásával:
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
Ez a lekérdezés az indexben lévő összes luxusszállodát az Eiffel-toronytól öt kilométerre adja vissza. A lekérdezésben:
Location
a szálloda helyét tároló mező neve.geography'POINT(2.294481 48.858370)'
az Eiffel-torony elhelyezkedése hosszúságként és szélességként.le 5
meghatározza, hogy a szállodáknak szerepelniük kell az eredményekben, ha ageo.distance
függvény öt kilométernél kisebb vagy egyenlő számot ad vissza.
Fontos
Szűrő használata geo.distance
esetén az egyenlő (eq
) és nem egyenlő (ne
) operátorok nem támogatottak. Ehelyett használja lt
a , le
, gt
vagy ge
.
Mivel geo.distance
több kilométert ad vissza, egy záradékban orderby
is használhatja. Ez a lekérdezés például az indexben szereplő összes luxusszállodát adja vissza, de az Eiffel-toronyhoz legközelebb lévők a következők:
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
Ebben a lekérdezésben azt határozza meg, asc
hogy a luxusszállodák az Eiffel-toronytól való távolságuk növekvő sorrendjében lesznek visszaadva.
A geo.intersects függvény használata
Tegyük fel, hogy úgy döntött, hogy párizs hetedik irondissement-ben szeretne maradni az Eiffel-toronyba való utazáshoz. Ha szállodát keres, a lehető legpontosabb módon szeretné megadni ezt a területet. Ezt a lekérdezést a geo.intersects
függvény használatával hozhatja létre.
A geo.intersects
függvény összehasonlít egy helyet a Föld felszínén található sokszöggel, amelyet három vagy több ponttal határoz meg. Sokszög használatával olyan alakzatot hozhat létre, amely szorosan megfelel egy területnek, például arrondissementnek. Ezzel a sokszögel adhat hozzá földrajzi szűrőt a lekérdezéshez:
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
Ez a lekérdezés az Eiffel-torony körüli téren lévő összes luxusszállodát visszaadja. Több mint négy ponttal pontosabb területet hozhat létre.
Fontos
A sokszögekben az óramutató járásával ellentétes sorrendben kell megadni a pontokat, a sokszöget pedig be kell zárni, ami azt jelenti, hogy az első és az utolsó megadott pontnak azonosnak kell lennie.
geo.intersects
logikai értéket ad vissza, ezért nem használható záradékban orderby
.