Bir sorguda otomatik tamamlama ve önerilen eşleşmeler için bir öneri oluşturucu yapılandırma

Azure AI Search'te bir öneri oluşturucu aracılığıyla typeahead (otomatik tamamlama) veya "yazarken ara" etkinleştirilir. Öneride bulunan, dizinde otomatik tamamlama ve önerileri doldurmak için hangi alanların kullanılması gerektiğini belirten bir yapılandırmadır. Bu alanlar, kısmi terimlerle eşleşmeleri desteklemek için ön ek dizileri oluşturarak ek belirteçlemeden geçer. Örneğin, "Seattle" değerine sahip bir City alanı içeren bir önericisi, typeahead'i desteklemek için "sea", "seat", "seatt" ve "seattl" ön ek birleşimlerine sahip olur.

Kısmi terimlerde eşleşmeler otomatik olarak tamamlanmış bir sorgu veya önerilen bir eşleşme olabilir. Aynı öneri oluşturucu her iki deneyimi de destekler.

Tür başlığı, bir terim sorgusu için kısmi girişi tamamlayan otomatik tamamlama veya belirli bir eşleşmeye tıklama davet eden öneriler olabilir. Otomatik tamamlama bir sorgu oluşturur. Öneriler, eşleşen bir belge oluşturur.

Aşağıdaki ekran görüntüsünde her ikisi de gösterilmektedir. Otomatik tamamlama, "in" ile "tw" işlemini tamamlayarak olası bir terim öngörmektedir. Öneriler, otel adı gibi bir alanın dizinden eşleşen bir otel arama belgesini temsil ettiği mini arama sonuçlarıdır. Öneriler için açıklayıcı bilgiler sağlayan herhangi bir alanı ortaya çıkarabilirsiniz.

Visual comparison of autocomplete and suggested queries

Bu özellikleri ayrı ayrı veya birlikte kullanabilirsiniz. Azure AI Search'te bu davranışları uygulamak için bir dizin ve sorgu bileşeni vardır.

Tür olarak ara, dize alanları için alan başına temelinde etkinleştirilir. Ekran görüntüsünde belirtilene benzer bir deneyim istiyorsanız, aynı arama çözümünde her iki tür başlığı davranışını da uygulayabilirsiniz. Her iki istek de belirli bir dizinden oluşan belge koleksiyonunu hedefler ve bir kullanıcı en az üç karakterli bir giriş dizesi sağladıktan sonra yanıtlar döndürülür.

Öneri oluşturucu oluşturma

Öneri oluşturucu oluşturmak için dizin tanımına bir öneri ekleyin. Öneride bulunan bir ad ve tür başlığı deneyiminin etkinleştirildiği bir alan koleksiyonu alır. Öneri oluşturucu oluşturmak için en iyi zaman, bunu kullanan alanı da tanımladığınız zamandır.

  • Yalnızca dize alanlarını kullanın.

  • Dize alanı karmaşık bir türün parçasıysa (örneğin, Adres içindeki bir Şehir alanı), alan yoluna üst öğeyi ekleyin: "Address/City" (REST ve C# ve Python) veya ["Address"]["City"] (JavaScript).

  • Alanda varsayılan standart Lucene çözümleyicisini ("analyzer": null) veya dil çözümleyicisini (örneğin, "analyzer": "en.Microsoft") kullanın.

Önceden var olan alanları kullanarak bir öneri oluşturucu oluşturmaya çalışırsanız, API buna izin vermemektedir. İki veya daha fazla karakter bileşimindeki kısmi terimler tüm terimlerle birlikte belirteç haline getirildiğinde, dizin oluşturma sırasında önekler oluşturulur. Mevcut alanların zaten belirteç haline getirildiği göz önünde bulundurulduğunda, bir önericiye eklemek istiyorsanız dizini yeniden oluşturmanız gerekir. Daha fazla bilgi için bkz . Azure AI Search dizinini yeniden oluşturma.

Alanları seçin

Bir öneri oluşturucunun çeşitli özellikleri olsa da, öncelikle bir tür olarak arama deneyimini etkinleştirdiğiniz bir dize alanları koleksiyonu. Her dizin için bir öneri aracı olduğundan, öneri listesi hem öneriler hem de otomatik tamamlama için içerik katkıda bulunan tüm alanları içermelidir.

Ek içerik daha fazla terim tamamlama potansiyeline sahip olduğundan, otomatik tamamlama, daha büyük bir alan havuzundan yararlanır.

Diğer taraftan öneriler, alan seçiminiz seçmeli olduğunda daha iyi sonuçlar üretir. Önerinin bir arama belgesi için ara sunucu olduğunu unutmayın, bu nedenle tek bir sonucu en iyi temsil eden alanları seçin. Birden çok eşleşmeyi ayırt eden adlar, başlıklar veya diğer benzersiz alanlar en iyi şekilde çalışır. Alanlar yinelenen değerlerden oluşuyorsa, öneriler aynı sonuçlardan oluşur ve kullanıcı hangisini seçeceğini bilemez.

Her iki tür olarak arama deneyimini de karşılamak için, otomatik tamamlama için ihtiyacınız olan tüm alanları ekleyin, sonra önerilerin sonuçlarını denetlemek için , top, filterve searchFields kullanınselect.

Çözümleyicileri seçme

Çözümleyici seçiminiz, alanların nasıl belirteç haline getirileceğini ve ön eklendiğini belirler. Örneğin, "bağlama duyarlı" gibi kısa çizgili bir dize için dil çözümleyicisi kullanıldığında şu belirteç bileşimleri elde edilir: "bağlam", "hassas", "bağlama duyarlı". Standart Lucene çözümleyicisini kullansaydınız, kısa çizgili dize mevcut olmazdı.

Çözümleyicileri değerlendirirken terimlerin nasıl işlendiğine ilişkin içgörüler için Metin Analizi API'sini kullanmayı göz önünde bulundurun. Bir dizin derledikten sonra, belirteç çıkışını görüntülemek için bir dizedeki çeşitli çözümleyicileri deneyebilirsiniz.

Kötü sonuçları önlemek için özel çözümleyiciler veya yerleşik çözümleyiciler kullanan alanlara (standart Lucene hariç) açıkça izin verilmez.

Not

Çözümleyici kısıtlamasını geçici olarak düzeltmeniz gerekiyorsa, örneğin belirli sorgu senaryoları için bir anahtar sözcük veya ngram çözümleyicisi gerekiyorsa, aynı içerik için iki ayrı alan kullanmanız gerekir. Bu, alanlardan birinin bir öneri oluşturucuya sahip olmasına olanak tanırken, diğeri özel çözümleyici yapılandırmasıyla ayarlanabilir.

Portalı kullanarak oluşturma

Dizin Oluşturmak için Dizin Ekle'yi veya Verileri içeri aktarma sihirbazını kullanırken, bir öneride bulunanı etkinleştirme seçeneğiniz vardır:

  1. Dizin tanımında, önericisi için bir ad girin.

  2. Yeni alanlar için her alan tanımında, Önericisi sütununda bir onay kutusu seçin. Yalnızca dize alanlarında bir onay kutusu kullanılabilir.

Daha önce belirtildiği gibi, çözümleyici seçimi belirteçleştirmeyi ve ön eki eklemeyi etkiler. Önericileri etkinleştirirken alan tanımının tamamını göz önünde bulundurun.

REST kullanarak oluşturma

REST API'de, Dizin Oluştur veya Dizini Güncelleştir aracılığıyla önerici ekleyin.

{
  "name": "hotels-sample-index",
  "fields": [
    . . .
        {
            "name": "HotelName",
            "type": "Edm.String",
            "facetable": false,
            "filterable": false,
            "key": false,
            "retrievable": true,
            "searchable": true,
            "sortable": false,
            "analyzer": "en.microsoft",
            "indexAnalyzer": null,
            "searchAnalyzer": null,
            "synonymMaps": [],
            "fields": []
        },
  ],
  "suggesters": [
    {
      "name": "sg",
      "searchMode": "analyzingInfixMatching",
      "sourceFields": ["HotelName"]
    }
  ],
  "scoringProfiles": [
    . . .
  ]
}

.NET kullanarak oluşturma

C# dilinde searchSuggester nesnesi tanımlayın. Suggesters SearchIndex nesnesi üzerindeki bir koleksiyondur, ancak yalnızca bir öğe alabilir. Dizin tanımına bir önericisi ekleyin.

private static void CreateIndex(string indexName, SearchIndexClient indexClient)
{
    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);

    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);

    indexClient.CreateOrUpdateIndex(definition);
}

Özellik başvurusu

Özellik Açıklama
Adı Öneri oluşturucu tanımında belirtilir, ancak otomatik tamamlama veya öneriler isteğinde de çağrılır.
sourceFields Önericisi tanımında belirtilir. Öneriler için içeriğin kaynağı olan dizindeki bir veya daha fazla alanın listesidir. Alanlar türünde Edm.Stringolmalıdır. Alanda bir çözümleyici belirtilirse, bu listeden adlandırılmış sözcük çözümleyicisi (özel çözümleyici değil) olmalıdır.

En iyi uygulama olarak, arama çubuğundaki tamamlanmış bir dize veya açılan liste olsun, yalnızca beklenen ve uygun bir yanıta ödünç veren alanları belirtin.

Otel adı, duyarlıklı olduğu için iyi bir adaydır. Açıklamalar ve açıklamalar gibi ayrıntılı alanlar çok yoğun. Benzer şekilde, kategoriler ve etiketler gibi yinelenen alanlar daha az etkilidir. Örneklerde, birden çok alan ekleyebildiğinizi göstermek için yine de "kategori" de dahil ediyoruz.
searchMode Yalnızca REST parametresi, ancak portalda da görünür. Bu parametre .NET SDK'sında kullanılamaz. Aday tümcecikleri aramak için kullanılan stratejiyi gösterir. Şu anda desteklenen tek mod, şu anda bir terimin başında eşleşen modudur analyzingInfixMatching.

Öneri oluşturucu kullanma

Bir sorguda bir önericisi kullanılır. Bir öneri oluşturucu oluşturulduktan sonra, yazarken arama deneyimi için aşağıdaki API'lerden birini çağırın:

Bir arama uygulamasında istemci kodu, kısmi sorguyu toplamak ve eşleşmeyi sağlamak için jQuery UI Otomatik Tamamlama gibi bir kitaplık kullanmalıdır. Bu görev hakkında daha fazla bilgi için bkz . İstemci koduna otomatik tamamlama veya önerilen sonuçlar ekleme.

API kullanımı, aşağıdaki Otomatik Tamamlama REST API çağrısında gösterilmiştir. Bu örnekten iki farklı seçenek vardır. İlk olarak, tüm sorgularda olduğu gibi, işlem bir dizinin belge koleksiyonuna karşıdır ve sorgu, bu durumda kısmi sorgu sağlayan bir search parametre içerir. İkincisi, isteğe eklemeniz suggesterName gerekir. Bir öneri oluşturucu dizinde tanımlanmamışsa, otomatik tamamlama çağrıları veya öneriler başarısız olur.

POST /indexes/myxboxgames/docs/autocomplete?search&api-version=2023-11-01
{
  "search": "minecraf",
  "suggesterName": "sg"
}

Örnek kod

Sonraki adımlar

İstekler\ formülasyon hakkında daha fazla bilgi edinin.