Arama sonuçlarına çok yönlü gezinti ekleme

Note

Azure Yapay Zeka Arama Azure portalı, REST API'leri ve Azure SDK’ları aracılığıyla kullanılabilir. Ayrıca kuruluş içeriğini Microsoft Foundry portalındaki aracılar için yeniden kullanılabilir, izin kullanan bilgi bankalarına dönüştüren yönetilen bilgi katmanı Foundry IQ'yu temel alır.

Ayrıntılı gezinti, uygulamanızın belge gruplarına (örneğin, kategoriler veya markalar) kapsam araması için form denetimleri sunduğu ve Azure Yapay Zeka Arama'in deneyimi desteklemek için veri yapıları ve filtreler sağladığı bir arama uygulamasında, sorgu sonuçları üzerinde kullanıcı tarafından yönlendirilen filtreleme için kullanılır.

Bu makalede, Azure Yapay Zeka Arama'da çok yönlü bir gezinti yapısı döndürme adımlarını öğrenin. Temel kavramlar ve istemciler hakkında bilgi edindikten sonra, söz dizimi ve çeşitli kullanım örnekleri hakkında bilgi edinmek için, temel fasetleme ve farklı sayım dahil olmak üzere Fasetin örneklerine geçin.

Önizleme API'leri aracılığıyla daha fazla yüzey yetenekleri mevcuttur.

  • hiyerarşik faset yapıları
  • faset filtreleme
  • faset toplamaları

Fasiyet gezinti örnekleri önizleme özellikleri için söz dizimi ve kullanım bilgilerini sağlar.

Arama sayfasında fasetli gezinme

Modeller, belirli sorgu sonuç kümelerini temel aldıkları için dinamiktir. Arama yanıtı, sonuçtaki belgelerde gezinmek için kullanılan tüm faset gruplarını getirir. Sorgu önce yürütülür ve ardından fasetler geçerli sonuçlardan çekilir ve fasetli bir gezinme yapısı içinde birleştirilir.

Azure Yapay Zeka Arama'de modeller bir katman derinliktedir ve önizleme API'sini kullanmadığınız sürece hiyerarşik olamaz. Boyutlu gezinme yapılarını bilmiyorsanız, aşağıdaki örnekte solda gösterilmektedir. Sayılar, her bir faset için eşleşme sayısını gösterir. Aynı belge birden çok modelde gösterilebilir.

Fasetli arama sonuçlarının ekran görüntüsü.

Boyutlar aradığınızı bulmanıza yardım eder ve sıfır sonuç almamanızı sağlar. Geliştirici olarak fasetler, arama dizininizde gezinmek için en kullanışlı arama ölçütlerini gösterebilmenizi sağlar.

Kodda fasetli gezinti

Yüzeyler, bir dizin içerisindeki desteklenen alanlarda etkinleştirilir ve ardından bir sorguda belirtilir. Fasetli gezinme yapısı yanıtın başında döndürülür ve ardından sonuçlar gelir.

Aşağıdaki REST örneği, tüm dizin kapsamında olan boş bir sorgudur ("search": "*"bkz. yerleşik oteller örneği). facets parametresi "Category" alanını belirtir.

POST https://{{service_name}}.search.windows.net/indexes/hotels-sample/docs/search?api-version={{api_version}}
{
    "search": "*",
    "queryType": "simple",
    "select": "",
    "searchFields": "",
    "filter": "",
    "facets": [ "Category"], 
    "orderby": "",
    "count": true
}

Örneğin yanıtı, modelli gezinti yapısıyla başlar. Yapı "Kategori" değerlerinden ve her biri için bir otel sayımından oluşur. Arama sonuçlarının geri kalanı, burada yalnızca özet için bir belgeyle sınırlı olacak şekilde takip eder. Bu örnek çeşitli nedenlerle düzgün çalışır. Bu alanın çokyüzlülük sayısı, sınıra düşer (varsayılan değer 10'dur), bu nedenle hepsi görünür ve 50 otel dizinindeki her otel bu kategorilerden tam olarak birinde gösterilir.

{
    "@odata.context": "https://demo-search-svc.search.windows.net/indexes('hotels-sample')/$metadata#docs(*)",
    "@odata.count": 50,
    "@search.facets": {
        "Category": [
            {
                "count": 13,
                "value": "Budget"
            },
            {
                "count": 12,
                "value": "Resort and Spa"
            },
            {
                "count": 9,
                "value": "Luxury"
            },
            {
                "count": 7,
                "value": "Boutique"
            },
            {
                "count": 5,
                "value": "Suite"
            },
            {
                "count": 4,
                "value": "Extended-Stay"
            }
        ]
    },
    "value": [
        {
            "@search.score": 1.0,
            "HotelId": "1",
            "HotelName": "Stay-Kay City Hotel",
            "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.",
            "Category": "Boutique",
            "Tags": [
                "pool",
                "air conditioning",
                "concierge"
            ],
            "ParkingIncluded": false,
        },
        . . . 
    ]
}

Alanlarda modelleri etkinleştirme

Düz metin veya sayısal içerik içeren yeni alanlara özellik ekleyebilirsiniz. Desteklenen veri türleri dizeleri, tarihleri, boole alanlarını ve sayısal alanları (vektörleri değil) içerir.

Azure portal, REST API'leri, Azure SDK'ları veya Azure Yapay Zeka Arama dizin şemaları oluşturmayı veya güncelleştirmeyi destekleyen herhangi bir yöntemi kullanabilirsiniz. İlk adım olarak, fasetleme için hangi alanların kullanılacağını belirleyin.

Hangi alanların ilişkilendirileceğini seç

Özellikler tek değerli alanlar ve koleksiyonlar üzerinden hesaplanabilir. Çok yönlü gezintide en iyi şekilde çalışan alanlar şu özelliklere sahiptir:

  • İnsan tarafından okunabilir (vektörel olmayan) içerik.
  • Düşük kardinalite (arama corpus'unuzda belgeler boyunca tekrarlanan birkaç ayrı değer).
  • Gezinme ağacında güzel bir şekilde görünen kısa açıklayıcı değerler (bir veya iki sözcük).

Bir alanın içindeki değerler, alan adının kendisi değil, yüzeyli bir gezinti yapısında yüzeyleri oluşturur. Color adlı bir dize alanı söz konusuysa, fasetler bu alan için mavi, yeşil ve diğer herhangi bir değerdir. Yazım hatası, null veya büyük/küçük harf farkları olmadığından emin olmak için alan değerlerini gözden geçirin. Metindeki küçük varyasyonları düzeltmek için filtrelenebilir ve modellenebilir bir alana normalleştirici atamayı göz önünde bulundurun. Örneğin, "Kanada", "KANADA" ve "kanada" tek bir demette normalleştirilir.

Desteklenmeyen alanlardan kaçının

Var olan alanlarda, vektör alanlarında veya türünde Edm.GeographyPoint veya Collection(Edm.GeographyPoint) olan alanlarda özellikler ayarlayamazsınız.

Karmaşık alan koleksiyonlarında "facetable" null olmalıdır.

Yeni alan tanımlarıyla başlayın

Bir alanın dizine nasıl eklendiğini etkileyen öznitelikler yalnızca alanlar oluşturulduğunda ayarlanabilir. Bu kısıtlama modeller ve filtreler için geçerlidir.

Dizininiz zaten varsa, fasetler sağlayan yeni bir alan tanımı ekleyebilirsiniz. Dizindeki mevcut belgeler yeni alan için null değer alır. Bu null değer, dizini bir sonraki yenilediğinizde yerine konur.

  1. Azure portal arama hizmetleri sayfasında, dizinin Fields sekmesine gidin ve Alan ekle'yi seçin.

  2. Ad, veri türü ve öznitelikler sağlayın. Yanıttaki faset kovasını temel alan filtreler ayarlamak yaygın olduğundan, filtrelenebilir özelliği eklemenizi öneririz. Filtreler sıralanmamış sonuçlar oluşturduğundan ve bunları uygulamanızda sıralamak isteyebileceğinizden sıralanabilir olmasını öneririz.

    Ayrıca, alanda tam metin aramasını desteklemek istiyorsanız aranabilir ve alanı arama yanıtına dahil etmek istiyorsanız alınabilir olarak ayarlayabilirsiniz.

    Azure portalında Alan ekleme sayfasının ekran görüntüsü.

  3. Alan tanımını kaydedin.

Sorguda yön döndürme

Özniteliklerin sorgu yanıtlarındaki sonuçlardan dinamik olarak hesaplandığını unutmayın. Yalnızca geçerli sorgu ile bulunan belgelerin özelliklerini alırsınız.

Azure portal'da bölüt parametrelerini ayarlamak için Arama Gezgini'nde JSON görünümünü kullanın.

  1. Bir dizin seçin ve JSON Görünümünde Arama Gezgini'yi açın.
  2. JSON'da bir sorgu sağlayın. Bunu yazabilir, REST örneğinden JSON'ı kopyalayabilir veya söz dizimine yardımcı olması için intellisense kullanabilirsiniz. Faset ifadelerine başvuru için sonraki sekmedeki REST örneğine bakın.
  3. JSON'da ifade edilen, çok yönlü sonuçlar döndürmek için Ara'yı seçin.

Burada hotels-sample dizinindekitemel model sorgusu örneğinin ekran görüntüsü verilmiş. Sonuçları Arama Gezgini'nde döndürmek için bu makaledeki diğer örnekleri yapıştırabilirsiniz.

Azure portalundaki Arama Gezgini sayfasının ekran görüntüsü.

Özelliklerle çalışmak için en iyi yöntemler

Bu bölüm, uygulama geliştirmeye yardımcı olan ipuçları ve geçici çözümlerden oluşan bir koleksiyondur.

C#: Sunum katmanı için kod içeren fasetli gezinti örneği için web uygulamalarına arama eklemenizi öneririz. Örnek filtreler, öneriler ve otomatik tamamlama da içerir. Sunu katmanı için JavaScript ve React kullanır.

Nitelenmemiş veya boş bir arama dizesiyle çok yönlü bir gezinti yapısı başlatma

Yüz tanımalı gezinti yapısını tamamen doldurmak için açık bir sorguyla ("search": "*") bir arama sayfası başlatmak yararlı olur. İstekte sorgu terimlerini geçirir geçirmez, fasetli gezinti yapısı dizinin tamamı yerine yalnızca sonuçlardaki eşleşmelerle sınırlandırılır. Bu uygulama, test sırasında faset ve filtre davranışlarını doğrulamaya yardımcı olur. Sorguya eşleşme kriterleri eklerseniz, yanıt eşleşmeyen belgeleri dışlar ve bu durum fasetlerin dışlanması gibi potansiyel bir sonuç doğurabilir.

Yüzeyleri temizle

Kullanıcı deneyimini tasarlarken, faktörleri temizlemek için bir mekanizma eklemeyi unutmayın. Fasetleri temizlemenin yaygın bir yaklaşımı, sayfayı sıfırlamak için açık bir sorgu göndermektir.

Depolama tasarrufu sağlamak ve performansı artırmak için faceting'i devre dışı bırakma

Performans ve depolama iyileştirme için hiçbir zaman boyut olarak kullanılmaması gereken alanlar için "facetable": false ayarlayın. Örnekler arasında, fasetli gezinmede yanlışlıkla (ve etkisiz) kullanımını önlemek için kimlik veya ürün adı gibi benzersiz değerlere yönelik dize alanları örnek olarak verilebilir. Bu en iyi yöntem, dize alanlarında varsayılan olarak filtreleri ve modelleri etkinleştiren REST API için özellikle önemlidir.

Unutmayın ki Edm.GeographyPoint veya Collection(Edm.GeographyPoint) alanlarını çok yönlü gezintide kullanamazsınız. Özelliklerin düşük kardinaliteye sahip alanlarda en iyi şekilde çalıştığını hatırlayın. Coğrafi koordinatların çözümlenme şekli nedeniyle, belirli bir veri kümesinde iki koordinat kümesinin eşit olması nadirdir. Bu nedenle modeller coğrafi koordinatlar için desteklenmez. Konuma göre kategorize etmek için bir şehir veya bölge alanı kullanmanız gerekir.

Hatalı verileri denetleme

Dizin oluşturma için veri hazırlarken null değerler, yazım hataları veya büyük/küçük harf tutarsızlıkları ve aynı sözcüğün tek ve çoğul sürümleri için alanları denetleyin. Varsayılan olarak, filtreler ve fasetler leksik çözümlemeden veya yazım denetiminden (önizleme) geçirilmez; bu da “fasetlenebilir” bir alanın tüm değerlerinin, sözcükler yalnızca bir karakter farklı olsa bile, potansiyel fasetler olduğu anlamına gelir.

Normalleştiriciler , büyük/küçük harf ve karakter farklılıklarını düzelterek veri tutarsızlıklarını hafifletebilir. Aksi takdirde, verilerinizi incelemek için kaynaklarındaki alanları denetleyebilir veya dizinden değer döndüren sorgular çalıştırabilirsiniz.

Dizin, null değerleri veya geçersiz değerleri düzeltmek için en iyi yer değildir. Veritabanı veya kalıcı bir storage olduğunu varsayarak veya dizin oluşturmadan önce gerçekleştirdiğiniz bir veri temizleme adımında kaynağınızdaki veri sorunlarını düzeltmeniz gerekir.

Faset demetlerini sıralama

Bir küme içinde sıralama yapabilmenize rağmen, gezinme yapısındaki özellik gruplarının sırasını bir bütün olarak denetlemeye yönelik bir parametre yoktur. Belirli bir sırada faset kovaları istiyorsanız, bunu uygulama kodunda sağlamanız gerekir.

Öğe sayılarındaki tutarsızlıklar

Belirli koşullar altında, parçalama mimarisi nedeniyle kesit sayılarının tam olarak doğru olmayabileceğini fark edebilirsiniz. Her arama dizini birden çok parçaya yayılır ve her parça belge sayısına göre en üst N modelleri raporlar ve bu da tek bir sonuçta birleştirilir. Her parça için yalnızca ilk N boyut olduğundan, boyut yanıtında eşleşen belgeleri kaçırmak veya az saymak mümkündür.

Doğruluğu garanti etmek için, her parçadan tam raporlamayı zorlamak için count:<number> değerini yapay olarak büyük bir sayıya şişirebilirsiniz. Sınırsız özellik için "count": "0" belirtebilirsiniz. Alternatif olarak, "count" değerini, fasetli alanın benzersiz değerlerinin sayısından büyük veya buna eşit bir değere ayarlayabilirsiniz. Örneğin, beş benzersiz değeri olan bir "boyut" alanıyla karşılaşıyorsanız, tüm eşleşmelerin model yanıtında temsil edilmesini sağlayacak şekilde ayarlayabilirsiniz "count:5" .

Bu geçici çözümle ilgili dezavantaj, sorgu gecikme süresini artırır, bu nedenle yalnızca gerektiğinde kullanın.

Filtrelenmiş sonuçların fasetli gezinme yapısını zaman uyumsuz olarak koruyun

Azure Yapay Zeka Arama'te faceler yalnızca mevcut sonuçlar için vardır. Ancak, kullanıcının adımlarını geriye doğru izleyerek arama içeriği boyunca alternatif yolları keşfetmesini sağlamak için statik bir unsur kümesini korumak yaygın bir uygulama gereksinimidir.

Dinamik derinlemesine inceleme deneyiminin yanı sıra statik bir faset kümesi istiyorsanız, bunu iki filtrelenmiş sorgu kullanarak uygulayabilirsiniz: Biri sonuçlara yönelik olarak belirlenir, diğeri ise gezinme amacıyla statik bir faset listesi oluşturmak için kullanılır.

Filtreler aracılığıyla büyük faset sayılarını dengeleme

Çok büyük olan arama sonuçları ve faset sonuçları, filtreler eklenerek kırpılabilir. Aşağıdaki örnekte, bulut bilgi işlem sorgusunda içerik türü olarak 254 öğenin iç belirtimi vardır. Sonuçlar çok büyükse, filtre eklemek kullanıcılarınızın daha fazla ölçüt ekleyerek sorguyu iyileştirmesine yardımcı olabilir.

Öğeler birbirini dışlamaz. Bir öğe her iki filtrenin ölçütlerini karşılıyorsa, her birinde sayılır. Bu yineleme, genellikle belge etiketlemeyi uygulamak için kullanılan alanlara Collection(Edm.String) bakılırken mümkündür.

Search term: "cloud computing"
Content type
   Internal specification (254)
   Video (10)

Sonraki adımlar