De rangschikking van een document verbeteren met termverhoging

Voltooid

Zoeken werkt het beste wanneer de meest relevante resultaten eerst worden weergegeven. Alle zoekmachines proberen de meest relevante resultaten te retourneren aan zoekquery's. Azure AI Search implementeert een verbeterde versie van Apache Lucene voor zoeken in volledige tekst.

Hier leert u hoe u complexere Lucene-query's schrijft. Vervolgens verbetert u de relevantie van resultaten door specifieke termen in uw zoekquery te stimuleren.

Een index doorzoeken

Met Azure AI Search kunt u een query uitvoeren op een index met behulp van een REST-eindpunt of in Azure Portal met het hulpprogramma Search Explorer. Als u een kort overzicht wilt van de fasen van het verwerken van query's, raadpleegt u de zoekindexeenheid in Een Azure AI Search-oplossing maken.

A diagram showing the four stages of query processing.

In deze les richt u zich op het parseren van query's.

U gebruikt Search Explorer om het verschil te zien tussen het gebruik van het eenvoudige en volledige querytype dat uw zoekresultaten wijzigt.

Notitie

Als u de query's zelf wilt uitvoeren, hebt u een Azure-abonnement nodig. Maak een Azure AI-Search-service en importeer de voorbeeldgegevens van de hotels in een index.

Een eenvoudige query schrijven

De voorbeeldgegevens van het hotel bevatten 50 hotels met beschrijvingen, kamergegevens en hun locaties. Stel dat u een hotelboekingsbedrijf uitvoert en een app hebt waarmee gebruikers hotels kunnen boeken. Gebruikers kunnen zoeken en de meest relevante hotels moeten eerst worden weergegeven.

U hebt een use case waarbij een klant een luxe hotel probeert te vinden. Bekijk eerst de zoekresultaten van deze eenvoudige query:

search=luxury&$select=HotelId, HotelName, Category, Tags, Description&$count=true

De query parseert de term luxury voor alle velden voor een document in de index.

De queryreeks beperkt ook de geretourneerde velden uit documenten door de select optie toe te voegen.

&$select=HotelId, HotelName, Category, Tags, Description

De laatste parameter van de query vraagt de index om de totale resultaten te tellen.

$count=true

Er is geen lexicale analyse nodig, dus bij het ophalen van documenten worden 14 documenten geretourneerd. De eerste drie zijn:

{
  "@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"
      ]
    },
    ...
  ]
}

De klant kan verbaasd zijn dat het tophotel dat u hebt dat luxe hoort te zijn, zich in de budgetcategorie bevindt en geen airconditioning heeft. Als de klant meerdere woorden invoert in de zoekopdracht, gaat uw app ervan uit dat alle termen in de resultaten moeten staan, zodat + wordt toegevoegd aan de query. Deze query die naar de API wordt verzonden, is:

search=luxury + air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true

De zoekservice retourneert nu vijf documenten, maar de belangrijkste resultaten bevinden zich nog steeds in de budgetcategorie.

De Lucene-queryparser inschakelen

U kunt de search explorer laten weten dat de Lucene-queryparser moet worden gebruikt door deze toe te voegen &queryType=full aan de querytekenreeks.

search=luxury AND air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full

Met de Lucene-syntaxis kunt u nauwkeurigere query's schrijven. Hier volgt een overzicht van de beschikbare functies:

  • Booleaanse operatoren: AND, NOT ORbijvoorbeeldluxury AND 'air con'
  • Zoeken in velden: fieldName:search term bijvoorbeeld Description:luxury AND Tags:air con
  • Fuzzy zoekopdracht: ~ retourneert bijvoorbeeld Description:luxury~ resultaten met verkeerd gespelde versies van luxe
  • Zoektermnabijheid: "term1 term2"~n retourneert bijvoorbeeld "indoor swimming pool"~3 documenten met de woorden binnen een binnenzwembad binnen drie woorden van elkaar
  • Reguliere expressie zoeken: /regular expression/ gebruik een reguliere expressie tussen / bijvoorbeeld /[mh]otel/ documenten retourneren met hotel en motel
  • Zoeken met jokertekens: *, ? waar * komt overeen met veel tekens en ? komt overeen met één teken, zou bijvoorbeeld 'air con'* airconditioning en airconditioning vinden
  • Prioriteitsgroepering: (term AND (term OR term)) bijvoorbeeld (Description:luxury OR Category:luxury) AND Tags:air?con*
  • Termverhoging: ^ bijvoorbeeld Description:luxury OR Category:luxury^3 hotels met de categorie luxe een hogere score geven dan luxe in de beschrijving

Zie Lucene-querysyntaxis in Azure AI Search in de documenten voor meer informatie over deze functies.

Zoektermen verhogen

Met behulp van het bovenstaande kunt u de resultaten verbeteren. De parser moet een hogere prioriteit geven aan hotels in de luxe categorie. U kunt ook nauwkeuriger zijn en zoeken naar airconditioning in het veld Tags.

(Description:luxury OR Category:luxury^3) AND Tags:'air con'*

Als u de andere queryreeksparameters toevoegt, krijgt u deze queryreeks:

search=(Description:luxury OR Category:luxury^3) AND Tags:'air con'*&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full

De drie beste hotels zijn 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"
      ]
    },
    ...
  ]
}

De zoekscore van De Saffieren Resorts is toegenomen van 2.3321536 tot 5.3537707 en is nu het eerste hotel dat de klant zal zien. Het Oceanside Resort is nu op de derde plaats.