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

Befejeződött

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 DescriptionCategory:

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 vissza true é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 a geo.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 lta , le, gtvagy 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 .