Förbättra rangordningen av ett dokument med termstärkning
Sökningen fungerar bäst när de mest relevanta resultaten visas först. Alla sökmotorer försöker returnera de mest relevanta resultaten för att söka efter frågor. Azure AI Search implementerar en förbättrad version av Apache Lucene för fulltextsökning.
Här utforskar du hur du skriver mer komplexa Lucene-frågor. Sedan förbättrar du resultatets relevans genom att öka specifika termer i din sökfråga.
Sök i ett index
Med Azure AI Search kan du köra frågor mot ett index med hjälp av en REST-slutpunkt eller inuti Azure Portal med sökutforskaren. Om du vill ha en snabb sammanfattning av faserna i frågebearbetningen kan du läsa sökindexenheten i Skapa en Azure AI Search-lösning.
I den här lektionen fokuserar du på frågeparsing.
Du använder sökutforskaren för att se skillnaden mellan att använda den enkla och fullständiga frågetypen och vilken effekt detta har dina sökresultat.
Kommentar
Om du vill köra frågorna själv behöver du en Azure-prenumeration. Skapa en Azure AI-tjänsten Search och importera hotellens exempeldata till ett index.
Skriva en enkel fråga
Hotellexempeldata innehåller 50 hotell med beskrivningar, rumsinformation och deras platser. Anta att du driver ett hotellbokningsföretag och har en app som användarna kan boka hotell med. Användarna kan söka och de mest relevanta hotellen måste visas först.
Du har ett användningsfall där en kund försöker hitta ett lyxhotell. Börja med att titta på sökresultaten från den här enkla frågan:
search=luxury&$select=HotelId, HotelName, Category, Tags, Description&$count=true
Frågeparserna söker efter termen luxury
i alla fält efter ett dokument i indexet.
Frågesträngen begränsar även de returnerade fälten från dokument genom att lägga till alternativet select
.
&$select=HotelId, HotelName, Category, Tags, Description
Den sista parametern i frågan ber indexet att räkna det totala resultatet.
$count=true
Det behövs ingen lexikal analys så dokumenthämtning returnerar 14 dokument. De tre första är:
{
"@odata.context": "https://advanced-cognitive-search.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
"@odata.count": 14,
"value": [
{
"@search.score": 2.633778,
"HotelId": "13",
"HotelName": "Historic Lion Resort",
"Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort",
"Category": "Budget",
"Tags": [
"view",
"free wifi",
"free wifi"
]
},
{
"@search.score": 2.1104424,
"HotelId": "18",
"HotelName": "Oceanside Resort",
"Description": "New Luxury Hotel. Be the first to stay. Bay views from every room, location near the piper, rooftop pool, waterfront dining & more.",
"Category": "Budget",
"Tags": [
"view",
"laundry service",
"air conditioning"
]
},
{
"@search.score": 1.966516,
"HotelId": "40",
"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.",
"Category": "Luxury",
"Tags": [
"continental breakfast",
"view",
"view"
]
},
...
]
}
Kunden kan bli förvånad över att det översta hotellet du har som ska vara lyx är i budgetkategorin och inte har någon luftkonditionering. Om kunden anger flera ord i sin sökning förutsätter din app att alla termer ska finnas i resultatet, så det lägger till + mellan termer i frågan. Frågan som skickas till API:et är:
search=luxury + air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true
Söktjänsten returnerar nu fem dokument, men de främsta resultaten finns fortfarande i budgetkategorin.
Aktivera Lucene Query Parser
Du kan be sökutforskaren att använda Lucene Query-parsern genom att lägga &queryType=full
till i frågesträngen.
search=luxury AND air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full
Med Lucene-syntaxen kan du skriva mer exakta frågor. Här är en sammanfattning av tillgängliga funktioner:
- Booleska operatorer:
AND
,OR
,NOT
till exempelluxury AND 'air con'
. - Fältsökning:
fieldName:search term
till exempelDescription:luxury AND Tags:air con
. - Fuzzy-sökning:
~
till exempelDescription:luxury~
returnerar resultat med felstavade versioner av lyx. - Termnärhetssökning:
"term1 term2"~n
till exempel"indoor swimming pool"~3
returnerar dokument med orden inomhuspool inom tre ord från varandra. - Reguljär uttryckssökning:
/regular expression/
Använd ett reguljärt uttryck mellan/
till exempel/[mh]otel/
returnera dokument med hotell och motell. - Jokerteckensökning:
*
,?
där*
matchar många tecken och?
matchar ett enda tecken, till exempel'air con'*
skulle hitta air con och luftkonditionering. - Prioritetsgruppering:
(term AND (term OR term))
till exempel(Description:luxury OR Category:luxury) AND Tags:air?con*
. - Termstädning:
^
till exempelDescription:luxury OR Category:luxury^3
skulle ge hotell med kategorin lyx en högre poäng än lyx i beskrivningen.
Mer information om dessa funktioner finns i Lucene-frågesyntax i Azure AI Search.
Öka söktermer
Med hjälp av ovanstående kan du förbättra resultatet. Parsern bör ge en högre prioritet till hotell i lyxkategorin. Du kan också vara mer exakt och leta efter luftkonditionering i fältet Taggar .
(Description:luxury OR Category:luxury^3) AND Tags:'air con'*
Om du lägger till de andra frågesträngsparametrarna får du den här frågesträngen:
search=(Description:luxury OR Category:luxury^3) AND Tags:'air con'*&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full
De tre bästa hotellen är nu:
{
"@odata.context": "https://advanced-cognitive-search.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
"@odata.count": 5,
"value": [
{
"@search.score": 5.3537707,
"HotelId": "8",
"HotelName": "Sapphire Resort",
"Description": "Downtown, close to everything, steps to the park, shopping, and restaurants.",
"Category": "Luxury",
"Tags": [
"free wifi",
"continental breakfast",
"air conditioning"
]
},
{
"@search.score": 5.3522806,
"HotelId": "49",
"HotelName": "Old Carrabelle Hotel",
"Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
"Category": "Luxury",
"Tags": [
"air conditioning",
"laundry service",
"24-hour front desk service"
]
},
{
"@search.score": 4.1448884,
"HotelId": "18",
"HotelName": "Oceanside Resort",
"Description": "New Luxury Hotel. Be the first to stay. Bay views from every room, location near the piper, rooftop pool, waterfront dining & more.",
"Category": "Budget",
"Tags": [
"view",
"laundry service",
"air conditioning"
]
},
...
]
}
Sapphire Resorts sökpoäng har ökat från 2.3321536 till 5.3537707 och är nu det första hotellet kunden kommer att se. Oceanside Resort ligger nu på tredje plats.