Azure Yapay Zeka Arama'teki OData search.in işlevi

Not

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.

OData filtre ifadelerinde yaygın bir senaryo, her belgedeki tek bir alanın birçok olası değerden birine eşit olup olmadığını denetlemektir. Örneğin, bazı uygulamalar güvenlik kırpmasını bu şekilde uygular -- sorguyu gerçekleştiren kullanıcıyı temsil eden asıl kimlikler listesine karşı, bir veya daha fazla asıl kimlik içeren bir alanı denetleyerek. Böyle bir sorgu yazmanın bir yolu, eq ile or işleçlerini kullanarak yapmaktır.

    group_ids/any(g: g eq '123' or g eq '456' or g eq '789')

Ancak, search.in işlevini kullanarak bunu yazmanın daha kısa bir yolu vardır.

    group_ids/any(g: search.in(g, '123, 456, 789'))

Önemli

Kullanımın daha kısa ve daha okunabilir olmasının yanı sıra, search.in performans avantajları sağlar ve filtreye yüzlerce, hatta binlerce değer dahil edilmesi gerektiğinde filtrelerin belirli boyut sınırlamalarını önler. Bu nedenle, eşitlik ifadelerinin daha karmaşık bir ayrıştırılması yerine kullanılmasını search.in kesinlikle öneririz.

Not

OData standardının 4.01 sürümü yakın zamanda Azure Yapay Zeka Arama'teki işlevle benzer davranışlara in sahip olan işleci kullanıma sunulmuştursearch.in. Ancak Azure Yapay Zeka Arama bu işleci desteklemez, bu nedenle bunun yerine işlevini kullanmanız search.in gerekir.

Sözdizimi

Aşağıdaki EBNF (Genişletilmiş Backus-Naur Formu) işlevin search.in dil bilgisini tanımlar:

search_in_call ::=
    'search.in(' variable ',' string_literal(',' string_literal)? ')'

Etkileşimli söz dizimi diyagramı da kullanılabilir:

Not

Tam EBNF için Azure Yapay Zeka Arama'e yönelik OData ifade söz dizimi başvurusuna bakın: .

İşlev, search.in belirli bir dize alanının veya aralık değişkeninin belirli bir değer listesinden birine eşit olup olmadığını test eder. Değişken ile listedeki her değer arasındaki eşitlik, işleç için eq olduğu gibi büyük/küçük harfe duyarlı bir şekilde belirlenir. Bu nedenle, search.in(myfield, 'a, b, c') ifadesi myfield eq 'a' or myfield eq 'b' or myfield eq 'c' ifadesiyle eşdeğerdir, ancak search.in ifadesi çok daha iyi bir performans verir.

search.in işlevinin iki aşırı yüklemesi vardır.

  • search.in(variable, valueList)
  • search.in(variable, valueList, delimiters)

Parametreler aşağıdaki tabloda tanımlanmıştır:

Parametre adı Tip Açıklama
variable Edm.String Bir dize alanı başvurusu veya search.in ifadesinin bir any veya all içinde kullanılması durumu için bir dize koleksiyonu alanı üzerinde bir aralık değişkeni.
valueList Edm.String variable parametresiyle eşleşmesi için sınırlandırılmış değerlerin listesini içeren bir dize. delimiters Parametre belirtilmezse, varsayılan sınırlayıcılar boşluk ve virgüldür.
delimiters Edm.String Parametre ayrıştırılırken valueList her karakterin ayırıcı olarak ele alındığı dize. Bu parametrenin varsayılan değeri, ' ,' aralarında boşluk ve/veya virgül bulunan tüm değerlerin ayrılacağı anlamına gelir. Değerleriniz bu karakterleri içerdiğinden boşluk ve virgül dışında ayırıcılar kullanmanız gerekiyorsa, bu parametrede olduğu gibi '|' alternatif sınırlayıcılar belirtebilirsiniz.

Performansı search.in

Eğer search.in kullanıyorsanız, ikinci parametre yüzlerce veya binlerce değerin listesini içerdiğinde saniyeden daha kısa cevap süresi bekleyebilirsiniz. Geçirebileceğiniz search.in öğe sayısı üzerinde açık bir sınır yoktur, ancak maksimum istek boyutuyla sınırlandırılırsınız. Ancak, değer sayısı arttıkça gecikme süresi de artar.

Örnekler

Adı 'Sea View motel' veya 'Budget hotel' olan tüm otelleri bulun. İfadeler, varsayılan sınırlayıcı olan boşlukları içerir. Üçüncü dize parametresi olarak tek tırnak içinde alternatif sınırlayıcı belirtebilirsiniz:

    search.in(HotelName, 'Sea View motel,Budget hotel', ',')

Adı 'Sea View motel' veya 'Budget hotel' olan ve '|' ile ayrılmış tüm otelleri bulun:

    search.in(HotelName, 'Sea View motel|Budget hotel', '|')

'wifi' veya 'tub' etiketine sahip odaları olan tüm otelleri bulun:

    Rooms/any(room: room/Tags/any(tag: search.in(tag, 'wifi, tub')))

Etiketlerde 'ısıtmalı havlu rafları' veya 'saç kurutma makinesi dahil' gibi koleksiyon içindeki tümceciklerde eşleşme bulun.

    Rooms/any(room: room/Tags/any(tag: search.in(tag, 'heated towel racks,hairdryer included', ','))

"Motel" veya "cabin" etiketi olmayan tüm otelleri bulun:

    Tags/all(tag: not search.in(tag, 'motel, cabin'))

Sonraki adımlar