Ulepszanie klasyfikacji dokumentu przy użyciu terminu zwiększającego
Wyszukiwanie działa najlepiej, gdy zostaną wyświetlone najbardziej odpowiednie wyniki. Wszystkie wyszukiwarki próbują zwrócić najbardziej odpowiednie wyniki do zapytań wyszukiwania. Usługa Azure AI Search implementuje rozszerzoną wersję rozwiązania Apache Lucene na potrzeby wyszukiwania pełnotekstowego.
W tym miejscu dowiesz się, jak napisać bardziej złożone zapytania Lucene. Następnie poprawisz znaczenie wyników, zwiększając określone terminy w zapytaniu wyszukiwania.
Przeszukiwanie indeksu
Usługa Azure AI Search umożliwia wykonywanie zapytań względem indeksu przy użyciu punktu końcowego REST lub w witrynie Azure Portal za pomocą narzędzia eksploratora wyszukiwania. Jeśli chcesz szybko podsumować etapy przetwarzania zapytań, zobacz jednostkę indeksu wyszukiwania w temacie Tworzenie rozwiązania usługi Azure AI Search.
W tej lekcji skoncentrujesz się na analizowaniu zapytań.
Użyjesz Eksploratora wyszukiwania, aby zobaczyć różnicę między użyciem prostego i pełnego typu zapytania a efektem, który ma wyniki wyszukiwania.
Uwaga
Jeśli chcesz samodzielnie uruchamiać zapytania, potrzebujesz subskrypcji platformy Azure. Utwórz usługa wyszukiwania usługi Azure AI i zaimportuj przykładowe dane hoteli do indeksu.
Pisanie prostego zapytania
Przykładowe dane hotelu zawierają 50 hoteli z opisami, szczegółami pokoju i ich lokalizacjami. Wyobraź sobie, że prowadzisz firmę rezerwacji hotelowych i masz aplikację, z którą użytkownicy mogą zarezerwować hotele. Użytkownicy mogą wyszukiwać, a najbardziej odpowiednie hotele muszą być wyświetlane jako pierwsze.
Masz przypadek użycia, w którym klient próbuje znaleźć luksusowy hotel. Zacznij od przejrzenia wyników wyszukiwania z tego prostego zapytania:
search=luxury&$select=HotelId, HotelName, Category, Tags, Description&$count=true
Analizowanie zapytań wyszuka termin luxury
we wszystkich polach dokumentu w indeksie.
Ciąg zapytania ogranicza również zwracane pola z dokumentów przez dodanie select
opcji.
&$select=HotelId, HotelName, Category, Tags, Description
Ostatni parametr w zapytaniu prosi indeks o zliczenie łącznych wyników.
$count=true
Nie jest wymagana analiza leksykalna, więc pobieranie dokumentu zwraca 14 dokumentów. Pierwsze trzy to:
{
"@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"
]
},
...
]
}
Klient może być zaskoczony, że najlepszy hotel, który ma być luksusowy , jest w kategorii budżetu i nie ma żadnej klimatyzacji. Jeśli klient wprowadzi wiele wyrazów w wyszukiwaniu, aplikacja zakłada, że wszystkie terminy powinny znajdować się w wynikach, dlatego dodaje wyrazy + między terminami do zapytania. Zapytanie wysyłane do interfejsu API to:
search=luxury + air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true
Usługa wyszukiwania zwraca teraz pięć dokumentów, ale najlepsze wyniki są nadal w kategorii budżetu.
Włączanie analizatora zapytań Lucene
Eksplorator wyszukiwania może użyć analizatora zapytań Lucene, dodając &queryType=full
do ciągu zapytania.
search=luxury AND air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full
Składnia Lucene umożliwia pisanie bardziej precyzyjnych zapytań. Oto podsumowanie dostępnych funkcji:
- Operatory logiczne:
AND
,OR
,NOT
na przykładluxury AND 'air con'
. - Wyszukiwanie pól:
fieldName:search term
na przykładDescription:luxury AND Tags:air con
. - Wyszukiwanie rozmyte:
~
na przykładDescription:luxury~
zwraca wyniki z błędnie napisanymi wersjami luksusu. - Wyszukiwanie w pobliżu terminu:
"term1 term2"~n
na przykład"indoor swimming pool"~3
zwraca dokumenty ze słowami kryty basen w ciągu trzech słów. - Wyszukiwanie wyrażeń regularnych:
/regular expression/
użyj wyrażenia regularnego między/
przykładami/[mh]otel/
, aby zwracać dokumenty z hotelem i motelem. - Wyszukiwanie symboli wieloznacznych:
*
,?
gdzie*
będzie pasował do wielu znaków i?
pasuje do pojedynczego znaku, na przykład'air con'*
można znaleźć klimatyzację i klimatyzację. - Grupowanie pierwszeństwa:
(term AND (term OR term))
na przykład(Description:luxury OR Category:luxury) AND Tags:air?con*
. - Zwiększenie terminu:
^
na przykładDescription:luxury OR Category:luxury^3
dałoby hotelom z kategorii luksus wyższy wynik niż luksus w opisie.
Aby dowiedzieć się więcej na temat tych funkcji, zobacz Składnia zapytań Lucene w usłudze Azure AI Search.
Zwiększ terminy wyszukiwania
Korzystając z powyższych, możesz poprawić wyniki. Parser powinien dać wyższy priorytet hotelom w kategorii luksusowej. Możesz również bardziej precyzyjne i wyszukać klimatyzację w polu Tagi .
(Description:luxury OR Category:luxury^3) AND Tags:'air con'*
Dodanie innych parametrów ciągu zapytania powoduje pobranie tego ciągu zapytania:
search=(Description:luxury OR Category:luxury^3) AND Tags:'air con'*&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full
Trzy najlepsze hotele są teraz:
{
"@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"
]
},
...
]
}
Wynik wyszukiwania Szafir Resorts wzrósł z 2,3321536 do 5,3537707 i jest teraz pierwszym hotelem, który klient zobaczy. Oceanside Resort jest teraz na trzecim miejscu.