Verbessern der Rangfolge eines Dokuments mit Ausdrucksverstärkung
Die Suche funktioniert am besten, wenn die relevantesten Ergebnisse zuerst angezeigt werden. Alle Suchmaschinen versuchen, die relevantesten Ergebnisse von Suchabfragen zurückzugeben. Die Azure KI-Suche implementiert eine verbesserte Version von Apache Lucene für die Volltextsuche.
Hier erkunden Sie, wie Sie komplexere Lucene-Abfragen schreiben. Anschließend verbessern Sie die Relevanz der Ergebnisse, indem Sie bestimmte Ausdrücke in Ihrer Suchabfrage verstärken.
Durchsuchen eines Index
Mit der Azure KI-Suche können Sie einen Index mithilfe eines REST-Endpunkts oder über das Azure-Portal mit dem Such-Explorer abfragen. Eine kurze Zusammenfassung der Phasen der Abfrageverarbeitung finden Sie der Lerneinheit zum Suchindex in Erstellen einer Azure KI-Suchlösung.
In dieser Lerneinheit liegt der Schwerpunkt auf der Abfrageanalyse.
Sie verwenden den Such-Explorer, um den Unterschied bei den Suchergebnissen zwischen dem einfachen und dem vollständigen Abfragetyp zu ermitteln.
Hinweis
Wenn Sie die Abfragen selbst ausführen möchten, benötigen Sie ein Azure-Abonnement. Erstellen Sie einen Azure KI-Suchdienst, und importieren Sie die Beispieldaten zu Hotels in einen Index.
Schreiben einer einfachen Abfrage
Die Hotel-Beispieldaten enthalten 50 Hotels mit Beschreibungen, Zimmerdetails und ihren Standorten. Stellen Sie sich vor, Sie führen ein Unternehmen für Hotelbuchungen und haben eine App, über die Benutzer*innen Hotelzimmer buchen können. Wenn Benutzer*innen eine Suche durchführen, müssen die relevantesten Hotels zuerst angezeigt werden.
Sie haben einen Anwendungsfall, in dem eine Person versucht, ein Luxushotel zu finden. Sehen Sie sich zuerst die Suchergebnisse aus dieser einfachen Abfrage an:
search=luxury&$select=HotelId, HotelName, Category, Tags, Description&$count=true
Bei der Abfrageanalyse wird nach dem Ausdruck luxury
in allen Feldern für ein Dokument im Index gesucht.
Die Abfragezeichenfolge beschränkt über die Option select
auch die aus Dokumenten zurückgegebenen Felder.
&$select=HotelId, HotelName, Category, Tags, Description
Der letzte Parameter in der Abfrage fragt den Index nach der Anzahl der Ergebnisse ab.
$count=true
Es ist keine lexikalische Analyse erforderlich. Daher werden beim Dokumentabruf 14 Dokumente zurückgegeben. Die ersten drei sind:
{
"@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"
]
},
...
]
}
Ihre Kundschaft könnte überrascht sein, dass Ihr Top-Hotel, das eigentlich den Status Luxus aufweisen sollte, in der Kategorie „Budget“ angesiedelt ist und über keine Klimaanlage verfügt. Wenn Ihre Kundschaft mehrere Wörter in die Suche eingibt, geht Ihre App davon aus, dass alle Begriffe in den Ergebnissen enthalten sein sollen, sodass sie zwischen Begriffen für die Abfrage ein Pluszeichen (+) einfügt. An die API wird dann die folgende Abfrage gesendet:
search=luxury + air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true
Der Suchdienst gibt jetzt fünf Dokumente zurück, aber die wichtigsten Ergebnisse stammen weiterhin aus der Kategorie „Budget“.
Aktivieren des Lucene-Abfrageparsers
Sie können den Such-Explorer anweisen, den Lucene-Abfrageparser zu verwenden, indem Sie in der Abfragezeichenfolge &queryType=full
hinzufügen.
search=luxury AND air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full
Mit der Lucene-Syntax können Sie präzisere Abfragen schreiben. Nachfolgend finden Sie eine Zusammenfassung der verfügbaren Features:
- Boolesche Operatoren:
AND
,OR
,NOT
, z. B.luxury AND 'air con'
- Feldsuche:
fieldName:search term
, z. B.Description:luxury AND Tags:air con
- Fuzzy-Suche:
~
.Description:luxury~
gibt z. B. Ergebnisse mit falsch geschriebenen Versionen von „luxury“ zurück. - Ausdrucks-NEAR-Suche:
"term1 term2"~n
."indoor swimming pool"~3
gibt z. B. Dokumente mit den Wörtern „indoor“, „swimming“ und „pool“ innerhalb von drei Wörtern voneinander getrennt zurück. - Suchen mit regulären Ausdrücken:
/regular expression/
. Die Verwendung eines regulären Ausdrucks zwischen/
(z. B/[mh]otel/
) gibt Dokumente mit „Hotel“ und „Motel“ zurück. - Platzhaltersuche:
*
,?
. Dabei entspricht*
mehreren Zeichen und?
einem einzelnen Zeichen, so würde z. B.'air con'*
„air con“ und „air conditioning“ (Klimaanlage) finden. - Rangfolgengruppierung:
(term AND (term OR term))
, z. B.(Description:luxury OR Category:luxury) AND Tags:air?con*
- Ausdrucksverstärkung:
^
.Description:luxury OR Category:luxury^3
gibt z. B. Hotels mit der Kategorie „luxury“ oder einer höheren Bewertung als „luxury“ in der Beschreibung zurück.
Weitere Informationen zu diesen Features finden Sie unter Lucene-Abfragesyntax in Azure KI-Suche.
Verstärken von Suchausdrücken
Mithilfe der oben genannten Optionen können Sie die Ergebnisse verbessern. Der Parser sollte Hotels der Luxuskategorie eine höhere Priorität geben. Sie können auch noch präziser im Feld Tags nach einer Klimaanlage suchen.
(Description:luxury OR Category:luxury^3) AND Tags:'air con'*
Wenn Sie der Abfragezeichenfolge noch die anderen Parameter hinzufügen, erhalten Sie diese Abfragezeichenfolge:
search=(Description:luxury OR Category:luxury^3) AND Tags:'air con'*&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full
Die ersten drei Hotels sind jetzt:
{
"@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"
]
},
...
]
}
Die Suchbewertung von Saphir Resorts hat sich von 2,3321536 auf 5,3537707 erhöht, sodass es jetzt das erste Hotel ist, das der Kundschaft angezeigt wird. Das Oceanside Resort befindet sich jetzt an dritter Stelle.