Példák a teljes Lucene keresési szintaxisra (speciális lekérdezések)
Az Azure AI Search lekérdezéseinek létrehozásakor az alapértelmezett egyszerű lekérdezéselemzőt lecserélheti a hatékonyabb Lucene lekérdezéselemzőre , hogy speciális és speciális lekérdezési kifejezéseket fogalmazzon meg.
A Lucene-elemző támogatja az összetett lekérdezési formátumokat, például a mezőalapú lekérdezéseket, a homályos keresést, az infixet és az utótagot helyettesítő karakterek keresését, a közelségi keresést, a kifejezéskiemelést és a reguláris kifejezéskeresést. Az extra teljesítmény több feldolgozási követelményeket is tartalmaz, ezért valamivel hosszabb végrehajtási időre kell számítania. Ebben a cikkben olyan példákat mutat be, amelyek teljes szintaxison alapuló lekérdezési műveleteket mutatnak be.
Feljegyzés
A teljes Lucene-lekérdezésszintaxison keresztül engedélyezett speciális lekérdezési szerkezetek közül sok nem végez szövegelemzést, ami meglepő lehet, ha a lemmatizálásra vagy a lemmatizálásra számít. A lexikális elemzés csak teljes kifejezéseken (kifejezés- vagy kifejezéskeresésen) történik. A hiányos kifejezéseket tartalmazó lekérdezéstípusok (előtag lekérdezés, helyettesítő lekérdezés, regex lekérdezés, homályos lekérdezés) közvetlenül a lekérdezésfához lesznek hozzáadva, megkerülve az elemzési szakaszt. A részleges lekérdezési feltételekkel végrehajtott egyetlen átalakítás az alsóbb réteg.
Hotelek mintaindexe
A következő lekérdezések a hotels-sample-indexen alapulnak, amelyeket az ebben a rövid útmutatóban található utasítások követésével hozhat létre.
A példa-lekérdezések a REST API és a POST kérések használatával vannak tagoltan. Beillesztheti és futtathatja őket egy REST-ügyfélben. Vagy használja a Search Explorer JSON-nézetét az Azure Portalon. JSON nézetben beillesztheti a cikkben bemutatott lekérdezési példákat.
A kérelemfejléceknek a következő értékekkel kell rendelkezniük:
Kulcs | Érték |
---|---|
Content-Type | application/json |
api-key |
<your-search-service-api-key> , lekérdezés vagy rendszergazdai kulcs |
Az URI-paramétereknek tartalmazniuk kell a keresési szolgáltatás végpontját az index nevével, a dokumentumgyűjteményekkel, a keresési paranccsal és az API-verzióval, az alábbi példához hasonlóan:
https://{{service-name}}.search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-07-01
A kérelem törzsét érvényes JSON-ként kell formázni:
{
"search": "*",
"queryType": "full",
"select": "HotelId, HotelName, Category, Tags, Description",
"count": true
}
search
értéke * egy meghatározatlan lekérdezés, amely null értékű vagy üres keresésnek felel meg. Ez nem különösen hasznos, de ez a legegyszerűbben elvégezhető keresés, és az index összes beolvasható mezőjét megjeleníti az összes értékkel együtt.queryType
a teljes Lucene-lekérdezéselemzőt meghívja, és ehhez a szintaxishoz szükséges.select
vesszővel tagolt mezőlistára van állítva a keresési eredmények összetétele, beleértve csak azokat a mezőket, amelyek hasznosak a keresési eredmények kontextusában.count
A keresési feltételeknek megfelelő dokumentumok számát adja vissza. Üres keresési sztring esetén a szám az index összes dokumentuma (50 a hotels-sample-indexben).
1. példa: Mezős keresés
A mezőalapú keresési tartományok egyéni, beágyazott keresési kifejezéseket egy adott mezőre. Ez a példa olyan szállodaneveket keres, amelyben a hotel kifejezés szerepel, de a motelt nem. A használatával több mezőt AND
is megadhat.
Ha ezt a lekérdezési szintaxist használja, kihagyhatja a searchFields
paramétert, ha a lekérdezni kívánt mezők magukban a keresési kifejezésben találhatók. Ha mezőalapú kereséssel is szerepel searchFields
, az fieldName:searchExpression
mindig elsőbbséget élvez a mezőalapú kereséssel szemben searchFields
.
POST /indexes/hotel-samples-index/docs/search?api-version=2024-07-01
{
"search": "HotelName:(hotel NOT motel) AND Category:'Boutique'",
"queryType": "full",
"select": "HotelName, Category",
"count": true
}
A lekérdezésre adott válasznak a következő példához hasonlóan kell kinéznie, amely a Butikra szűrve jelenik meg, és olyan szállodákat ad vissza, amelyekben szerepel a szálloda a névben, és kizárja azokat az eredményeket, amelyekben a motel szerepel a névben.
{
"@odata.count": 5,
"value": [
{
"@search.score": 2.2289815,
"HotelName": "Stay-Kay City Hotel",
"Category": "Boutique"
},
{
"@search.score": 1.3862944,
"HotelName": "City Skyline Antiquity Hotel",
"Category": "Boutique"
},
{
"@search.score": 1.355046,
"HotelName": "Old Century Hotel",
"Category": "Boutique"
},
{
"@search.score": 1.355046,
"HotelName": "Sublime Palace Hotel",
"Category": "Boutique"
},
{
"@search.score": 1.355046,
"HotelName": "Red Tide Hotel",
"Category": "Boutique"
}
]
}
A keresési kifejezés lehet egy kifejezés, egy kifejezés, vagy egy összetettebb kifejezés zárójelben, opcionálisan logikai operátorokkal. Néhány példa a következőkre:
HotelName:(hotel NOT motel)
Address/StateProvince:("WA" OR "CA")
Tags:("free wifi" NOT "free parking") AND "coffee in lobby"
Ügyeljen arra, hogy idézőjelek közé tegyen egy kifejezést, ha mindkét sztringet egyetlen entitásként szeretné kiértékelni, mivel ebben az esetben két különböző helyet keres a Address/StateProvince
mezőben. Az ügyféltől függően előfordulhat, hogy el kell menekülnie (\
) az idézőjelek elől.
A megadott fieldName:searchExpression
mezőnek kereshető mezőnek kell lennie. A meződefiníciók attribútumainak megismeréséhez tekintse meg az Index létrehozása (REST API) című témakört.
2. példa: Homályos keresés
A homályos keresés hasonló kifejezéseket tartalmaz, beleértve a hibásan írt szavakat is. Ha nem megfelelő keresést szeretne végezni, fűzze hozzá a tilde ~
szimbólumot egyetlen szó végén egy választható paraméterrel, egy 0 és 2 közötti értékkel, amely megadja a szerkesztési távolságot. Például kéket, blue~
blue~1
kéket és ragasztót ad vissza.
POST /indexes/hotel-samples-index/docs/search?api-version=2024-07-01
{
"search": "Tags:conserge~",
"queryType": "full",
"select": "HotelName, Category, Tags",
"searchFields": "HotelName, Category, Tags",
"count": true
}
A lekérdezésre adott válasz a megfelelő dokumentumok concierge-jének feloldását oldja fel, a rövidség kedvéért levágva:
{
"@odata.count": 9,
"value": [
{
"@search.score": 1.4947624,
"HotelName": "Twin Vortex Hotel",
"Category": "Luxury",
"Tags": [
"bar",
"restaurant",
"concierge"
]
},
{
"@search.score": 1.1685618,
"HotelName": "Stay-Kay City Hotel",
"Category": "Boutique",
"Tags": [
"view",
"air conditioning",
"concierge"
]
},
{
"@search.score": 1.1465473,
"HotelName": "Old Century Hotel",
"Category": "Boutique",
"Tags": [
"pool",
"free wifi",
"concierge"
]
},
. . .
]
}
A kifejezések közvetlenül nem támogatottak, de megadhat egy homályos egyezést egy többrészes kifejezés minden egyes kifejezésére, például search=Tags:landy~ AND sevic~
. Ez a lekérdezési kifejezés 15 találatot talál a mosodai szolgáltatásban.
Feljegyzés
A rendszer nem elemzi a homályos lekérdezéseket. A hiányos kifejezéseket tartalmazó lekérdezéstípusok (előtag lekérdezés, helyettesítő lekérdezés, regex lekérdezés, homályos lekérdezés) közvetlenül a lekérdezésfához lesznek hozzáadva, megkerülve az elemzési szakaszt. A részleges lekérdezési feltételekkel végrehajtott egyetlen átalakítás az alacsonyabb casing.
3. példa: Közelségi keresés
A közelségi keresés megkeresi a dokumentumban egymáshoz közeli kifejezéseket. Szúrjon be egy tilde ~
szimbólumot egy kifejezés végére, amelyet a közelségi határt létrehozó szavak száma követ.
Ez a lekérdezés egy dokumentumban egymástól öt szó alatt megkeresi a szálloda és a repülőtér kifejezést. Az idézőjelek () a következő kifejezés megőrzése érdekében kerülnek ki\"
:
POST /indexes/hotel-samples-index/docs/search?api-version=2024-07-01
{
"search": "Description: \"hotel airport\"~5",
"queryType": "full",
"select": "HotelName, Description",
"searchFields": "HotelName, Description",
"count": true
}
A lekérdezés válaszának a következő példához hasonlóan kell kinéznie:
{
"@odata.count": 1,
"value": [
{
"@search.score": 0.69167054,
"HotelName": "Trails End Motel",
"Description": "Only 8 miles from Downtown. On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, All non-smoking hotel. Only 15 miles from airport."
}
]
}
4. példa: Kifejezésnövelés
A kifejezésnövelés azt jelenti, hogy egy dokumentumot magasabbra rangsorolt, ha a kiemelt kifejezést tartalmazza, a nem a kifejezést tartalmazó dokumentumokhoz képest. Egy kifejezés kiemeléséhez használja a caret , ^
szimbólumot a keresett kifejezés végén egy kiemelési tényezővel (számmal). A boost factor default értéke 1, és bár pozitívnak kell lennie, 1-nél kisebb lehet (például 0,2). A kifejezésnövelés abban különbözik a pontozási profiloktól, hogy a pontozási profilok adott kifejezések helyett bizonyos mezőket emelnek ki.
Ebben a lekérdezés előtt keressen rá a strand elérésére, és figyelje meg, hogy hat dokumentum egy vagy mindkét feltételnek felel meg.
POST /indexes/hotel-samples-index/docs/search?api-version=2024-07-01
{
"search": "beach access",
"queryType": "full",
"select": "HotelName, Description, Tags",
"searchFields": "HotelName, Description, Tags",
"count": true
}
Valójában csak két dokumentum egyezik a hozzáféréssel. Az első példány a második helyen áll, annak ellenére, hogy a dokumentumból hiányzik a strand kifejezés.
{
"@odata.count": 6,
"value": [
{
"@search.score": 1.068669,
"HotelName": "Johnson's Family Resort",
"Description": "Family oriented resort located in the heart of the northland. Operated since 1962 by the Smith family, we have grown into one of the largest family resorts in the state. The home of excellent Smallmouth Bass fishing with 10 small cabins, we're a home not only to fishermen but their families as well. Rebuilt in the early 2000's, all of our cabins have all the comforts of home. Sporting a huge **beach** with multiple water toys for those sunny summer days and a Lodge full of games for when you just can't swim anymore, there's always something for the family to do. A full marina offers watercraft rentals, boat launch, powered dock slips, canoes (free to use), & fish cleaning facility. Rent pontoons, 14' fishing boats, 16' fishing rigs or jet ski's for a fun day or week on the water. Pets are accepted in the lakeside cottages.",
"Tags": [
"24-hour front desk service",
"pool",
"coffee in lobby"
]
},
{
"@search.score": 1.0162708,
"HotelName": "Campus Commander Hotel",
"Description": "Easy **access** to campus and steps away from the best shopping corridor in the city. From meetings in town or gameday, enjoy our prime location between the union and proximity to the university stadium.",
"Tags": [
"free parking",
"coffee in lobby",
"24-hour front desk service"
]
},
{
"@search.score": 0.9050383,
"HotelName": "Lakeside B & B",
"Description": "Nature is Home on the **beach**. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the library by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.",
"Tags": [
"laundry service",
"concierge",
"free parking"
]
},
{
"@search.score": 0.8955848,
"HotelName": "Windy Ocean Motel",
"Description": "Oceanfront hotel overlooking the **beach** features rooms with a private balcony and 2 indoor and outdoor pools. Inspired by the natural beauty of the island, each room includes an original painting of local scenes by the owner. Rooms include a mini fridge, Keurig coffee maker, and flatscreen TV. Various shops and art entertainment are on the boardwalk, just steps away.",
"Tags": [
"pool",
"air conditioning",
"bar"
]
},
{
"@search.score": 0.83636594,
"HotelName": "Happy Lake Resort & Restaurant",
"Description": "The largest year-round resort in the area offering more of everything for your vacation – at the best value! What can you enjoy while at the resort, aside from the mile-long sandy **beaches** of the lake? Check out our activities sure to excite both young and young-at-heart guests. We have it all, including being named “Property of the Year” and a “Top Ten Resort” by top publications.",
"Tags": [
"pool",
"bar",
"restaurant"
]
},
{
"@search.score": 0.7808502,
"HotelName": "Swirling Currents Hotel",
"Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking **access** to shopping, dining, entertainment and the city center. Each room comes equipped with a microwave, a coffee maker and a minifridge. In-room entertainment includes complimentary W-Fi and flat-screen TVs. ",
"Tags": [
"air conditioning",
"laundry service",
"24-hour front desk service"
]
}
]
}
A lekérdezést követő lekérdezésben ismételje meg a keresést, ezúttal a strand kifejezéssel növelve a találatokat a hozzáférés kifejezésen. A lekérdezés egy emberi olvasásra alkalmas verziója.search=Description:beach^2 access
Az ügyféltől függően előfordulhat, hogy ki kell fejeznie ^2
a következőképpen: %5E2
.
POST /indexes/hotel-samples-index/docs/search?api-version=2024-07-01
{
"search": "Description:beach^2 access",
"queryType": "full",
"select": "HotelName, Description, Tags",
"searchFields": "HotelName, Description, Tags",
"count": true
}
A strand kifejezés kiemelése után a Campus Commander Hotel meccse az ötödik helyre kerül.
{
"@odata.count": 6,
"value": [
{
"@search.score": 2.137338,
"HotelName": "Johnson's Family Resort",
"Description": "Family oriented resort located in the heart of the northland. Operated since 1962 by the Smith family, we have grown into one of the largest family resorts in the state. The home of excellent Smallmouth Bass fishing with 10 small cabins, we're a home not only to fishermen but their families as well. Rebuilt in the early 2000's, all of our cabins have all the comforts of home. Sporting a huge beach with multiple water toys for those sunny summer days and a Lodge full of games for when you just can't swim anymore, there's always something for the family to do. A full marina offers watercraft rentals, boat launch, powered dock slips, canoes (free to use), & fish cleaning facility. Rent pontoons, 14' fishing boats, 16' fishing rigs or jet ski's for a fun day or week on the water. Pets are accepted in the lakeside cottages.",
"Tags": [
"24-hour front desk service",
"pool",
"coffee in lobby"
]
},
{
"@search.score": 1.8100766,
"HotelName": "Lakeside B & B",
"Description": "Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the library by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.",
"Tags": [
"laundry service",
"concierge",
"free parking"
]
},
{
"@search.score": 1.7911696,
"HotelName": "Windy Ocean Motel",
"Description": "Oceanfront hotel overlooking the beach features rooms with a private balcony and 2 indoor and outdoor pools. Inspired by the natural beauty of the island, each room includes an original painting of local scenes by the owner. Rooms include a mini fridge, Keurig coffee maker, and flatscreen TV. Various shops and art entertainment are on the boardwalk, just steps away.",
"Tags": [
"pool",
"air conditioning",
"bar"
]
},
{
"@search.score": 1.6727319,
"HotelName": "Happy Lake Resort & Restaurant",
"Description": "The largest year-round resort in the area offering more of everything for your vacation – at the best value! What can you enjoy while at the resort, aside from the mile-long sandy beaches of the lake? Check out our activities sure to excite both young and young-at-heart guests. We have it all, including being named “Property of the Year” and a “Top Ten Resort” by top publications.",
"Tags": [
"pool",
"bar",
"restaurant"
]
},
{
"@search.score": 1.0162708,
"HotelName": "Campus Commander Hotel",
"Description": "Easy access to campus and steps away from the best shopping corridor in the city. From meetings in town or gameday, enjoy our prime location between the union and proximity to the university stadium.",
"Tags": [
"free parking",
"coffee in lobby",
"24-hour front desk service"
]
},
{
"@search.score": 0.7808502,
"HotelName": "Swirling Currents Hotel",
"Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center. Each room comes equipped with a microwave, a coffee maker and a minifridge. In-room entertainment includes complimentary W-Fi and flat-screen TVs. ",
"Tags": [
"air conditioning",
"laundry service",
"24-hour front desk service"
]
}
]
}
5. példa: Regex
A reguláris kifejezéskeresés a RegExp osztályban dokumentált perjelek /
és kisbetűs sztringek tartalma alapján keres egyezést.
POST /indexes/hotel-samples-index/docs/search?api-version=2024-07-01
{
"search": "HotelName:/(Mo|Ho)tel/",
"queryType": "full",
"select": "HotelName",
"count": true
}
A lekérdezésre adott válasznak az alábbi példához hasonlóan kell kinéznie (a rövidség kedvéért levágva):
{
"@odata.count": 25,
"value": [
{
"@search.score": 1,
"HotelName": "Country Residence Hotel"
},
{
"@search.score": 1,
"HotelName": "Downtown Mix Hotel"
},
{
"@search.score": 1,
"HotelName": "Gastronomic Landscape Hotel"
},
. . .
{
"@search.score": 1,
"HotelName": "Trails End Motel"
},
{
"@search.score": 1,
"HotelName": "Nordick's Valley Motel"
},
{
"@search.score": 1,
"HotelName": "King's Cellar Hotel"
}
]
}
Feljegyzés
A Regex-lekérdezések nem lesznek elemezve. A részleges lekérdezési feltételekkel végrehajtott egyetlen átalakítás az alacsonyabb casing.
6. példa: Helyettesítő karakterek keresése
Általánosan felismert szintaxist használhat több (*
) vagy egy (?
) karakteres helyettesítő karakter kereséséhez. A Lucene lekérdezéselemző egyetlen kifejezéssel és nem kifejezéssel támogatja ezeknek a szimbólumoknak a használatát.
Ebben a lekérdezésben keresse meg az sc előtagot tartalmazó szállodaneveket. Nem használhat szimbólumot vagy ?
szimbólumot *
a keresés első karaktereként.
POST /indexes/hotel-samples-index/docs/search?api-version=2024-07-01
{
"search": "HotelName:sc*",
"queryType": "full",
"select": "HotelName",
"count": true
}
A lekérdezés válaszának a következő példához hasonlóan kell kinéznie:
{
"@odata.count": 1,
"value": [
{
"@search.score": 1,
"HotelName": "Waterfront Scottish Inn"
}
]
}
Feljegyzés
A helyettesítő lekérdezések nem lesznek elemezve. A részleges lekérdezési feltételekkel végrehajtott egyetlen átalakítás az alacsonyabb casing.
Kapcsolódó tartalom
Próbálja meg kódban megadni a lekérdezéseket. Az alábbi hivatkozás bemutatja, hogyan állíthat be keresési lekérdezéseket az Azure SDK-k használatával.
További szintaxishivatkozások, lekérdezési architektúra és példák az alábbi cikkekben találhatók: