Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
Filtre, anahtar sözcük araması için sorgu yürütmeden önce veya vektör araması için sorgu yürütmeden önce veya sonra içeriği dahil etme veya dışlama için değer tabanlı ölçütler sağlar. Filtreler, nonvector alanlarına uygulanır, ancak belgelerde nonvector alanları varsa vektör aramasında kullanılabilir. Örneğin, öbeklenmiş içerik etrafında düzenlenmiş dizinler için filtrelenebilen üst düzey alanlara veya meta veri alanlarına sahip olabilirsiniz.
Bu makalede anahtar sözcük araması için filtreleme açıklanmaktadır. Vektörler hakkında daha fazla bilgi için bkz. Vektör sorgusuna filtre ekleme.
OData filtre ifadesi söz dizimi kullanılarak bir filtre belirtilir. Anahtar sözcük ve vektör aramasının aksine, bir filtre yalnızca eşleşmenin tam olması durumunda başarılı olur.
Filtre ne zaman kullanılır?
Filtreler, "yakınımda bul" jeo-uzamsal arama, çok yönlü gezinti ve yalnızca bir kullanıcının görmesine izin verilen belgeleri gösteren güvenlik filtreleri gibi çeşitli arama deneyimlerinin temelini oluşturur. Bu deneyimlerden birini uygularsanız bir filtre gerekir. Coğrafi konum koordinatlarını, kullanıcı tarafından seçilen model kategorisini veya istek sahibinin güvenlik kimliğini sağlayan arama sorgusuna eklenmiş filtredir.
Yaygın senaryolar şunlardır:
Arama sonuçlarını dizindeki içeriğe göre dilimleyin. Otel konumu, kategorileri ve olanakları içeren bir şema göz önünde bulundurulduğunda, ölçütlere (Seattle'da, suda, bir görünüme sahip) açıkça eşleşmesi için bir filtre oluşturabilirsiniz.
Filtre bağımlılığıyla birlikte gelen bir arama deneyimi uygulayın:
- Fasetli gezinti, kullanıcı tarafından seçilen faset kategorisini geri iletmek için bir filtre kullanır.
- Jeo-uzamsal arama , bir alan içinde veya uzaktan eşleşen "yakınımda bul" uygulamalarında ve işlevlerinde geçerli konumun koordinatlarını geçirmek için bir filtre kullanır.
- Güvenlik filtreleri , güvenlik tanımlayıcılarını filtre ölçütü olarak geçirir; burada dizindeki bir eşleşme, belgeye erişim hakları için ara sunucu görevi görür.
"Sayı araması" yapın. Sayısal alanlar alınabilir ve arama sonuçlarında görünebilir, ancak ayrı ayrı aranabilir değillerdir (tam metin araması kapsamında arama yapılamaz). Sayısal verilere göre seçim ölçütlerine ihtiyacınız varsa filtre kullanın.
Filtreler nasıl yürütülür?
Sorgu zamanında, filtre ayrıştırıcısı ölçütleri giriş olarak kabul eder, ifadeyi ağaç olarak temsil edilen atomik Boole ifadelerine dönüştürür ve sonra filtre ağacını bir dizindeki filtrelenebilir alanlar üzerinde değerlendirir.
Filtreleme, arama ile birlikte gerçekleşir ve belge alma ve alaka puanlaması için hangi belgelerin sonraki işlem adımlarına dahil edileceğini belirler. Bir arama dizesiyle eşleştirildiğinde, filtre sonraki arama işleminin geri çağırma kümesini etkili bir şekilde azaltır. Tek başına kullanıldığında (örneğin, sorgu dizesi boş search=*olduğunda), filtre ölçütü tek giriştir.
Filtreler nasıl tanımlanır?
Filtreler, filterable olarak özniteliklendirilen alanlardaki metin ve sayısal (vektörel olmayan) içeriğe uygulanır.
Filtreler, filter söz diziminde Azure Yapay Zeka Arama tarafından desteklenen OData ifadeleridir.
Her arama işlemi için bir filtre belirtebilirsiniz, ancak filtrenin kendisi birden çok alan, birden çok ölçüt ve bir ismatch işlev kullanıyorsanız birden çok tam metin arama ifadesi içerebilir. Çok parçalı filtre ifadesinde, koşulları herhangi bir sırada belirtebilirsiniz (işleç önceliği kurallarına tabidir). Belirli bir dizideki önkoşulları yeniden düzenlemeye çalışırsanız performansta takdire değer bir kazanç yoktur.
Filtre ifadesinde sınırlardan biri, isteğin boyut üst sınırıdır. Filtre dahil olmak üzere isteğin tamamı POST için en fazla 16 MB veya GET için 8 KB olabilir. Ayrıca, filtre ifadenizdeki yan tümcelerin sayısıyla ilgili bir sınır da vardır. İyi bir kural, yüzlerce yan tümceniz varsa sınıra varma riskiniz olmasıdır. Uygulamanızı, ilişkisiz boyutta filtreler oluşturmeyecek şekilde tasarlamanızı öneririz.
Aşağıdaki örnekler, çeşitli API'lerdeki prototip filtre tanımlarını temsil eder.
POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2026-04-01
{
"search": "*",
"filter": "Rooms/any(room: room/BaseRate lt 150.0)",
"select": "HotelId, HotelName, Rooms/Description, Rooms/BaseRate"
}
options = new SearchOptions()
{
Filter = "Rating gt 4",
OrderBy = { "Rating desc" }
};
Filtre desenleri
Aşağıdaki örneklerde filtre senaryoları için çeşitli kullanım desenleri gösterilmektedir. Daha fazla fikir için bkz. OData ifadesi söz dizimi > Örnekleri.
Tek başına $filter, sorgu dizesi olmadan, filtre ifadesi ilgili belgeleri tam olarak niteleyebiliyorsa kullanışlıdır. Sorgu dizesi olmadan sözcük temelli veya dilsel analiz, puanlama ve sıralama yoktur. Arama dizesinin yalnızca bir yıldız işareti olduğuna dikkat edin; bu da "tüm belgeleri eşleştir" anlamına gelir.
{ "search": "*", "filter": "Rooms/any(room: room/BaseRate ge 60 and room/BaseRate lt 300) and Address/City eq 'Honolulu" }Filtrenin alt kümeyi oluşturduğu ve sorgu dizesinin filtrelenmiş alt küme üzerinde tam metin araması için terim girişleri sağladığı sorgu dizesi ve $filter birleşimi. Terimlerin (yürüme mesafesindeki tiyatrolar) eklenmesi, sonuçlarda arama puanlarını tanıtır ve burada terimlerle en iyi eşleşen belgeler daha yüksek derecelenir. Sorgu dizesiyle filtre kullanmak en yaygın kullanım düzenidir.
{ "search": "walking distance theaters", "filter": "Rooms/any(room: room/BaseRate ge 60 and room/BaseRate lt 300) and Address/City eq 'Seattle'" }Her biri kendi filtre ölçütlerine sahip "veya" ile ayrılmış bileşik sorgular (örneğin, 'köpek' içinde 'beagle' veya 'kedi' içinde 'siamese'). ile
orbirleştirilen ifadeler, yanıtta geri gönderilen her ifadeyle eşleşen belgelerin birleşimiyle ayrı ayrı değerlendirilir. Bu kullanım desenisearch.ismatchscoringfonksiyonu aracılığıyla elde edilir. Ayrıca, puanlanmayan sürümü desearch.ismatcholarak kullanabilirsiniz.# Match on hostels rated higher than 4 OR 5-star motels. $filter=search.ismatchscoring('hostel') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 5 # Match on 'luxury' or 'high-end' in the description field OR on category exactly equal to 'Luxury'. $filter=search.ismatchscoring('luxury | high-end', 'Description') or Category eq 'Luxury'&$count=trueAyrıca,
search.ismatchscoringaracılığıyla tam metin aramasını,andyerineorkullanarak filtrelerle birleştirmek de mümkündür; ancak bu, bir arama isteğindesearchve$filterparametrelerini kullanmaya işlevsel olarak eşdeğerdir. Örneğin, aşağıdaki iki sorgu aynı sonucu üretir:$filter=search.ismatchscoring('pool') and Rating ge 4 search=pool&$filter=Rating ge 4
Filtreleme için alan gereksinimleri
REST API'de, basit alanlar için filtrelenebilir varsayılan olarak açıktır . Filtrelenebilir alanlar dizin boyutunu artırır; Filtrede kullanmayı planlamadığınız alanlar için ayarlamayı "filterable": false unutmayın. Alan tanımları ayarları hakkında daha fazla bilgi için bkz. Dizin Oluşturma.
Azure SDK'lerinde, filtreleme varsayılan olarak kapalı'dır. İlgili SearchField nesnesinin true olarak ayarlayarak bir alanı filtrelenebilir hale getirebilirsiniz. Sonraki örnekte, dizin tanımına eşleyen bir model sınıfının Rating özelliğine öznitelik ayarlanır.
[SearchField(IsFilterable = true, IsSortable = true, IsFacetable = true)]
public double? Rating { get; set; }
Var olan bir alanı filtrelenebilir hale getirme
Varolan alanları filtrelenebilir hale getirmek için değiştiremezsiniz. Bunun yerine yeni bir alan eklemeniz veya dizini yeniden oluşturmanız gerekir. Dizini yeniden oluşturma veya alanları yeniden doldurma hakkında daha fazla bilgi için bkz. Azure Yapay Zeka Arama dizini yeniden oluşturma.
Metin filtresi temelleri
Metin filtreleri, dize alanlarını, filtrede sağladığınız literal dizelerle eşleştirir: $filter=Category eq 'Resort and Spa'
Tam metin aramanın aksine, metin filtreleri için sözcük temelli analiz veya sözcük kesme yoktur, bu nedenle karşılaştırmalar yalnızca tam eşleşmeler içindir. Örneğin, f alanının "güneşli gün" içerdiğini, $filter=f eq 'sunny' eşleşmediği, ancak $filter=f eq 'sunny day' eşleşeceğini varsayalım.
Metin dizeleri büyük/küçük harfe duyarlıdır, yani metin filtreleri varsayılan olarak büyük/küçük harfe duyarlıdır. Örneğin, $filter=f eq 'Sunny day' "güneşli gün" bulunamaz. Ancak, filtrelemenin büyük/küçük harfe duyarlı olmamasını sağlamak için bir normalleştirici kullanabilirsiniz.
Metin üzerinde filtreleme yaklaşımları
| Yaklaşım | Açıklama | Ne zaman kullanılır? |
|---|---|---|
search.in |
Bir alanı sınırlandırılmış dize listesiyle eşleştiren bir işlev. |
Güvenlik filtreleri ve birçok ham metin değerinin bir dize alanıyla eşleşmesi gereken filtreler için önerilir.
search.in işlevi hız için tasarlanmıştır ve eq ile or kullanarak alanı her dizeyle açıkça karşılaştırmaktan çok daha hızlıdır. |
search.ismatch |
Aynı filtre ifadesinde tam metin arama işlemlerini kesinlikle Boole filtre işlemleriyle karıştırmanıza olanak tanıyan bir işlev. | Tek bir istekte birden çok arama filtresi bileşimi istediğinizde search.ismatch (veya puanlama eşdeğeri search.ismatchscoring) kullanın. Daha büyük bir dize içindeki kısmi bir dizeye filtre uygulamak üzere bir içerir filtresi için de kullanabilirsiniz. |
$filter=field operator string |
Alanlar, işleçler ve değerlerden oluşan kullanıcı tanımlı ifade. | Bir dize alanı ile dize değeri arasındaki tam eşleşmeleri bulmak istediğinizde bunu kullanın. |
Sayısal filtre temelleri
Sayısal alanlar tam metin araması bağlamında değildir searchable . Yalnızca dizeler tam metin aramasına tabidir. Örneğin, arama terimi olarak 99,99 girerseniz, 99,99 ABD doları fiyatlanan öğeleri geri alamazsınız. Bunun yerine, belgenin dize alanlarında 99 numaralı öğeleri görürsünüz. Bu nedenle, sayısal verileriniz varsa, bunları aralıklar, modeller, gruplar vb. gibi filtreler için kullanacağınız varsayımı vardır.
Sayısal alanlar (fiyat, boyut, SKU, Kimlik) içeren belgeler, alan olarak işaretlenirse retrievablearama sonuçlarında bu değerleri sağlar. Burada, tam metin aramasının sayısal alan türleri için geçerli olmadığı belirtildi.
Sonraki adımlar
İlk olarak, $filter parametreleriyle sorgu göndermek için Azure portalında Search explorer deneyin. Real-estate-sample dizini, arama çubuğuna yapıştırdığınızda aşağıdaki filtrelenmiş sorgular için ilginç sonuçlar sağlar:
# Geo-filter returning documents within 5 kilometers of Redmond, Washington state
# Use $count=true to get a number of hits returned by the query
# Use $select to trim results, showing values for named fields only
# Use search=* for an empty query string. The filter is the sole input
search=*&$count=true&$select=description,city,postCode&$filter=geo.distance(location,geography'POINT(-122.121513 47.673988)') le 5
# Numeric filters use comparison like greater than (gt), less than (lt), not equal (ne)
# Include "and" to filter on multiple fields (baths and bed)
# Full text search is on John Leclerc, matching on John or Leclerc
search=John Leclerc&$count=true&$select=source,city,postCode,baths,beds&$filter=baths gt 3 and beds gt 4
# Text filters can also use comparison operators
# Wrap text in single or double quotes and use the correct case
# Full text search is on John Leclerc, matching on John or Leclerc
search=John Leclerc&$count=true&$select=source,city,postCode,baths,beds&$filter=city gt 'Seattle'
Daha fazla örnekle çalışmak için bkz. OData Filtre İfadesi Söz Dizimi > Örnekleri.
Ayrıca bkz.
Azure Yapay Zeka Arama - Arama Belgeleri REST API'si
- Basit sorgu söz dizimi
- Lucene sorgu söz dizimi
- Desteklenen veri türleri