Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Note
Azure AI Keresés a Azure portálon, REST API-kon és Azure SDK-k keresztül érhető el. Emellett a Foundry IQ-t is támogatja, amely a vállalati tartalmakat újrafelhasználható, engedélytudatos tudásbázisokká alakítja át az Microsoft Foundry portálon található ügynökök számára.
A szűrő értékalapú feltételeket biztosít a tartalom belefoglalásához vagy kizárásához a kulcsszókeresés lekérdezés-végrehajtása előtt vagy után, illetve a vektorkeresés lekérdezésvégrehajtása előtt vagy után. A szűrők nem adatvektormezőkre vannak alkalmazva, de vektoros keresésben is használhatók, ha a dokumentumok nem adatfeltáró mezőket tartalmaznak. Például az adattömbbe rendezett tartalom köré rendezett indexek esetében előfordulhat, hogy szülőszintű mezők vagy metaadatmezők szűrhetők.
Ez a cikk a kulcsszókeresés szűrését ismerteti. A vektorokról további információt a Szűrő hozzáadása vektoros lekérdezésben című témakörben talál.
A szűrő OData szűrőkifejezési szintaxissal van megadva. A kulcsszó- és vektorkereséssel ellentétben a szűrő csak akkor sikeres, ha az egyezés pontos.
Mikor érdemes szűrőt használni?
A szűrők számos keresési funkció alapjai, beleértve a "közelben keresés" térinformatikai keresést, a részletes navigációt és a biztonsági szűrőket, amelyek csak azokat a dokumentumokat jelenítik meg, amelyeket a felhasználó megtekinthet. Ha ezen szolgáltatások bármelyikét implementálja, szűrőre van szükség. Ez a keresési lekérdezéshez csatolt szűrő, amely megadja a földrajzi hely koordinátáit, a felhasználó által kiválasztott aspektuskategóriát vagy a kérelmező biztonsági azonosítóját.
Gyakori forgatókönyvek a következők:
A keresési eredményeket az index tartalma alapján szeletelheti. Figyelembe véve egy sémát, amely tartalmazza a szálloda elhelyezkedését, kategóriáit és szolgáltatásait, lehetőség van, hogy létrehoz egy szűrőt, amely egyértelműen illeszkedik a kritériumokhoz (Seattle-ben, a vízen, kilátással).
Szűrőfüggőséghez kapcsolódó keresési felület implementálása:
- A faceted navigáció szűrővel adja vissza a felhasználó által kiválasztott aspektuskategóriát.
- A térinformatikai keresés szűrővel adja át az aktuális hely koordinátáit a "közelben talál" alkalmazásokban és függvényekben, amelyek egy adott területen belül vagy távolság alapján egyeznek meg.
- A biztonsági szűrők szűrőfeltételként adják át a biztonsági azonosítókat, ahol az indexben lévő egyezés proxyként szolgál a dokumentum hozzáférési jogosultságaihoz.
Végezze el a "számok keresését". A numerikus mezők lekérdezhetők, és megjelenhetnek a keresési eredményekben, de nem kereshetők (teljes szöveges kereséssel) egyenként. Ha numerikus adatokon alapuló kiválasztási feltételekre van szüksége, használjon szűrőt.
Szűrők végrehajtása
Lekérdezéskor a szűrőelemző bemenetként fogadja el a feltételeket, a kifejezést faként ábrázolt atomi logikai kifejezésekké alakítja, majd kiértékeli a szűrőfát egy index szűrhető mezői felett.
A szűrés a kereséssel párhuzamosan történik, így a dokumentumlekérés és a relevanciapontozás szempontjából melyik dokumentumokat kell belefoglalni az alsóbb rétegbeli feldolgozásba. Keresési sztringgel párosítva a szűrő hatékonyan csökkenti a későbbi keresési művelet visszahívási készletét. Ha egyedül használja (például ha a lekérdezési sztring üres, ahol search=*), a szűrőfeltétel az egyetlen bemenet.
A szűrők definiálásának menete
A szűrők az olyan mezők szöveges és numerikus (nemvektoriális) tartalmára vonatkoznak, amelyek az alábbi módon filterable vannak hozzárendelve.
A szűrők OData-kifejezések, amelyeket a szűrési szintaxis támogat az Azure AI Keresés-ben.
Minden keresési művelethez megadhat egy szűrőt, de maga a szűrő több mezőt, több feltételt és függvény használata esetén ismatch több teljes szöveges keresési kifejezést is tartalmazhat. Többrészes szűrőkifejezésekben a predikátumokat bármilyen sorrendben megadhatja (az operátorok elsőbbsége szabályaira is figyelemmel). Nincs észlelhető teljesítménynövekedés, ha megpróbálja adott sorrendbe rendezni a predikátumokat.
A szűrőkifejezések egyik korlátja a kérelem maximális méretkorlátja. A teljes kérelem a szűrővel együtt legfeljebb 16 MB lehet POST esetén, a GET esetében pedig 8 KB. A szűrőkifejezésben a záradékok száma is korlátozott. Egy általános irányelv, hogy amikor több száz záradékot használsz, fennáll annak a kockázata, hogy elérheted a határt. Javasoljuk, hogy úgy tervezzen meg egy alkalmazást, hogy ne hozzon létre kötetlen méretű szűrőket.
Az alábbi példák prototipikus szűrődefiníciókat jelölnek több API-ban.
POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2026-04-01
{
"search": "*",
"filter": "Rooms/any(room: room/BaseRate lt 150.0)",
"select": "HotelId, HotelName, Rooms/Description, Rooms/BaseRate"
}
options = new SearchOptions()
{
Filter = "Rating gt 4",
OrderBy = { "Rating desc" }
};
Szűrési minták
Az alábbi példák a szűrőforgatókönyvek használati mintáit szemléltetik. További ötletekért tekintse meg az OData kifejezés szintaxisának > példáit.
A különálló $filter lekérdezési sztring nélkül akkor hasznos, ha a szűrőkifejezés képes teljes mértékben minősíteni az érdekes dokumentumokat. Lekérdezési sztring nélkül nincs lexikális vagy nyelvi elemzés, nincs pontozás és nincs rangsorolás. Figyelje meg, hogy a keresési sztring csak egy csillag, ami azt jelenti, hogy "minden dokumentumnak megfelel".
{ "search": "*", "filter": "Rooms/any(room: room/BaseRate ge 60 and room/BaseRate lt 300) and Address/City eq 'Honolulu" }A lekérdezési sztring és a $filter kombinációja, ahol a szűrő létrehozza az alhalmazt, és a lekérdezési sztring megadja a kifejezés bemeneteit a szűrt részhalmaz teljes szöveges kereséséhez. A kifejezések (sétatávolságra lévő színházak) hozzáadása keresési pontszámokat ad az eredményekhez, ahol a kifejezéseknek leginkább megfelelő dokumentumok rangsorolása magasabb. A lekérdezési sztringgel rendelkező szűrő használata a leggyakoribb használati minta.
{ "search": "walking distance theaters", "filter": "Rooms/any(room: room/BaseRate ge 60 and room/BaseRate lt 300) and Address/City eq 'Seattle'" }Összetett lekérdezések, "vagy" szerint elválasztva, saját szűrőfeltételekkel (például "bagles" a "dog" vagy "sziámi" a "macska"-ban). A kifejezéseket a
orrendszer egyenként értékeli ki, és az egyes kifejezéseknek megfelelő dokumentumokat egyesítve küldi vissza a válaszban. Ez a használati minta asearch.ismatchscoringfüggvényen keresztül érhető el. Használhatja a nem pontozó verziót is.search.ismatch# Match on hostels rated higher than 4 OR 5-star motels. $filter=search.ismatchscoring('hostel') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 5 # Match on 'luxury' or 'high-end' in the description field OR on category exactly equal to 'Luxury'. $filter=search.ismatchscoring('luxury | high-end', 'Description') or Category eq 'Luxury'&$count=trueA teljes szöveges keresést a
search.ismatchscoringsegítségével szűrőkkel lehet kombinálniandhelyettor, de funkcionálisan ez egyenértékű a keresési kérésekben asearchés$filterparaméterek használatával. A következő két lekérdezés például ugyanazt az eredményt adja:$filter=search.ismatchscoring('pool') and Rating ge 4 search=pool&$filter=Rating ge 4
A szűrés mezőkövetelményei
A REST API-ban a szűrhető alapértelmezés szerint be van kapcsolva az egyszerű mezők esetében. A szűrhető mezők növelik az index méretét; ügyeljen arra, hogy olyan mezőket állítson be "filterable": false , amelyeket nem szeretne ténylegesen használni egy szűrőben. További információ a meződefiníciók beállításairól: Index létrehozása.
Az Azure SDK-kban a szűrhetőség alapértelmezetten off. A mezők szűrhetővé alakíthatók úgy, hogy a megfelelő SearchField objektum IsFilterable tulajdonságát a következőre állítjatrue. A következő példában az attribútum egy olyan modellosztály tulajdonságán Rating van beállítva, amely megfelel az indexdefiníciónak.
[SearchField(IsFilterable = true, IsSortable = true, IsFacetable = true)]
public double? Rating { get; set; }
Meglévő mező szűrhetővé tétele
A meglévő mezőket nem módosíthatja, hogy szűrhetőek legyenek. Ehelyett új mezőt kell hozzáadnia, vagy újra kell építenie az indexet. További információ az indexek újraépítéséről vagy a mezők újratöltéséről: A Azure AI Keresés index újraépítése.
A szövegszűrő alapjai
A szövegszűrők összehasonlítják a karakterlánc mezőket a szűrőben megadott literális karakterláncokkal: $filter=Category eq 'Resort and Spa'
A teljes szöveges kereséssel ellentétben nincs lexikális elemzés vagy szótörés a szövegszűrők esetében, így az összehasonlítások csak a pontos egyezésekre használhatók. Tegyük fel például, hogy az f mező "napos nap" tartalmaz, $filter=f eq 'sunny' nem egyezik, de a $filter=f eq 'sunny day' egyezni fog.
A szövegkarakterláncok érzékenyek a kis- és nagybetűkre, ami azt jelenti, hogy a szövegszűrők alapértelmezés szerint szintén érzékenyek a kis- és nagybetűkre. Például $filter=f eq 'Sunny day' nem találja a "napos napot". Azonban a normalizálóval beállíthatja, hogy a szűrés ne legyen kis- és nagybetű érzékeny.
A szöveg szűrésének megközelítései
| Megközelítés | Leírás | Mikor érdemes használni? |
|---|---|---|
search.in |
Olyan függvény, amely összehasonlít egy mezőt a karakterláncokkal elválasztott listájával. |
Biztonsági szűrőkhöz és olyan szűrőkhöz ajánlott, ahol sok nyers szöveges értéket kell sztringmezővel egyeztetni. A search.in függvény sebességre van tervezve, és sokkal gyorsabb, mint a mező minden egyes sztringgel való egyértelmű összehasonlítása eq és or használatával. |
search.ismatch |
Egy függvény, amely lehetővé teszi, hogy a teljes szöveges keresési műveleteket szigorúan logikai szűrőműveletekkel keverje ugyanabban a szűrőkifejezésben. | A search.ismatch (vagy annak pontozási megfelelője, a search.ismatchscoring) függvényt akkor használja, ha több keresési szűrő kombinációt szeretne egy kérelemben használni. Egy tartalmazó szűrőt is használhat arra, hogy egy nagyobb sztringen belüli részleges sztringre szűrjön. |
$filter=field operator string |
Mezőkből, operátorokból és értékekből álló, felhasználó által definiált kifejezés. | Ezt akkor használja, ha pontos egyezéseket szeretne keresni egy sztringmező és egy sztringérték között. |
Numerikus szűrő alapjai
A numerikus mezők nincsenek searchable a teljes szöveges keresés kontextusában. Csak a karakterláncokra vonatkozik a teljes szöveges keresés. Ha például a 99,99-et adja meg keresési kifejezésként, akkor nem kap vissza 99,99 usd értékű elemeket. Ehelyett a dokumentum sztringmezőiben a 99-es számmal rendelkező elemek jelennek meg. Így ha numerikus adatokkal rendelkezik, a feltételezés az, hogy szűrőkhöz, például tartományokhoz, aspektusokhoz, csoportokhoz stb. fogja használni őket.
A numerikus mezőket (ár, méret, termékváltozat, azonosító) tartalmazó dokumentumok akkor adják meg ezeket az értékeket a keresési eredményekben, ha a mező meg van jelölve retrievable. A lényeg az, hogy maga a teljes szöveges keresés nem alkalmazható numerikus mezőtípusokra.
Következő lépések
Először próbálja meg Search Explorer a Azure portálon, hogy $filter paraméterekkel küldjön lekérdezéseket. Az ingatlanminta-index érdekes eredményeket biztosít a következő szűrt lekérdezésekhez, amikor beilleszti őket a keresősávba:
# Geo-filter returning documents within 5 kilometers of Redmond, Washington state
# Use $count=true to get a number of hits returned by the query
# Use $select to trim results, showing values for named fields only
# Use search=* for an empty query string. The filter is the sole input
search=*&$count=true&$select=description,city,postCode&$filter=geo.distance(location,geography'POINT(-122.121513 47.673988)') le 5
# Numeric filters use comparison like greater than (gt), less than (lt), not equal (ne)
# Include "and" to filter on multiple fields (baths and bed)
# Full text search is on John Leclerc, matching on John or Leclerc
search=John Leclerc&$count=true&$select=source,city,postCode,baths,beds&$filter=baths gt 3 and beds gt 4
# Text filters can also use comparison operators
# Wrap text in single or double quotes and use the correct case
# Full text search is on John Leclerc, matching on John or Leclerc
search=John Leclerc&$count=true&$select=source,city,postCode,baths,beds&$filter=city gt 'Seattle'
További példákkal kapcsolatban lásd az OData szűrőkifejezés szintaxisának > példáit.
Lásd még:
A teljes szöveges keresés működése a Azure AI Keresés - Dokumentumok keresése REST API
- Egyszerű lekérdezési szintaxis
- Lucene lekérdezés szintaxisa
- Támogatott adattípusok