Azure Yapay Zeka Arama'te basit sorgu söz dizimi

Tam metin arama senaryoları için Azure Yapay Zeka Arama her biri sorgu ayrıştırıcısına hizalanmış iki Lucene tabanlı sorgu dili uygular. Basit Sorgu Ayrıştırıcısı varsayılan değerdir. Yaygın kullanım örneklerini kapsar ve mükemmel bir şekilde oluşturulmuş olmasa bile bir isteği yorumlamaya çalışır. Diğer ayrıştırıcı Lucene Sorgu Ayrıştırıcısı'dır ve daha gelişmiş sorgu yapılarını destekler.

Bu makale, basit sorgu ayrıştırıcısı için sorgu söz dizimi başvurusudur.

Her iki ayrıştırıcı için de sorgu söz dizimi, bir sorgu isteğindeki search parametresinde geçirilen sorgu ifadeleri için geçerlidir. Kendi söz dizimi ve kurallara sahip olan orderby ile karıştırılmamalıdır; bu, aynı istekteki filter ve ifadeleri için geçerlidir.

Basit ayrıştırıcı Apache Lucene Basit Sorgu Ayrıştırıcısı sınıfını temel alsa da, Azure Yapay Zeka Arama uygulaması belirsiz aramayı dışlar. Bulanık aramaya ihtiyacınız varsa, bunun yerine tam Lucene sorgu sözdizimini göz önünde bulundurun.

Örnek (basit söz dizimi)

Bu örnek, "queryType": "simple" ve geçerli söz dizimi ile ayırt edilen basit bir sorguyu gösterir. Sorgu türü aşağıda ayarlanmış olsa da, varsayılan değerdir ve alternatif bir türden geri dönmediğiniz sürece atlanabilir. Aşağıdaki örnek, tüm eşleşen belgelerin "havuz" içermesi gereksinimiyle bağımsız terimler üzerinde yapılan bir aramadır.

POST https://{{service-name}}.search.windows.net/indexes/hotel-rooms-sample/docs/search?api-version=2026-04-01
{
  "queryType": "simple",
  "search": "budget hotel +pool",
  "searchMode": "all"
}

searchMode parametresi bu örnekte geçerlidir. Sorguda boole işleçleri olduğunda, searchMode=all ölçütlerin eşleştiğinden emin olmak için ayarlamanız gerekir. Aksi takdirde, kesinliğe göre geri çağırmayı tercih eden varsayılan searchMode=any değerini kullanabilirsiniz.

Daha fazla örnek için bkz . Basit sorgu söz dizimi örnekleri. Sorgu isteği ve parametreleri hakkında ayrıntılı bilgi için bkz. Belge Arama (REST API).

Terimler ve tümcecikler üzerinde anahtar sözcük araması

parametresine search geçirilen dizeler, desteklenen herhangi bir dilde terimler veya ifadeler, boole işleçleri, öncelik işleçleri, "ile başlar" sorguları için joker veya ön ek karakterleri, kaçış karakterleri ve URL kodlama karakterlerini içerebilir. search parametresi isteğe bağlıdır. Belirtilmemiş, arama (search=* veya search=" ") rastgele (unranked) sırada ilk 50 belgeyi döndürür.

  • Terim araması, terimlerden herhangi birinin eşleşme olarak kabul edildiği bir veya daha fazla terim içeren bir sorgudur.

  • İfade araması, tırnak içine " "alınmış tam bir ifadedir. Örneğin, (tırnak işaretleri olmadan) herhangi bir sırada Roach Motel ve/veya Roach içeren ve Motel herhangi bir yerindeki belgeleri ararken, "Roach Motel" (tırnak işaretleri ile), yalnızca bu ifadeyi birlikte ve bu sırada içeren belgelerle eşleşir (dilbilimsel analiz geçerli olmaya devam eder).

Arama istemcinize bağlı olarak, tümcecik aramasında tırnak işaretlerine kaçış yapmanız gerekebilir. Örneğin, bir POST isteğinde, istek gövdesinde "Roach Motel" üzerinde yapılan bir tümcecik araması "\"Roach Motel\"" olarak belirtilebilir. Azure SDK’ları kullanıyorsanız, arama istemcisi arama metnini seri hale getirdiğinde tırnak işaretlerinden kaçar. Arama tümceciğiniz "Roach Motel" olarak gönderilebilir.

Varsayılan olarak, parametresinde search geçirilen tüm dizeler sözcük temelli analizden geçer. Kullandığınız çözümleyicinin belirteç oluşturma davranışını anladığınızdan emin olun. Genellikle sorgu sonuçları beklenmedik olduğunda, bunun nedeni terimlerin sorgu zamanında nasıl belirteç haline getirildiğine izlenebilir. Çıkışı onaylamak için belirli dizelerde belirteçleştirmeyi test edebilirsiniz.

Bir veya daha fazla terim içeren metin girişleri, sorgu yürütme için geçerli bir başlangıç noktası olarak kabul edilir. Azure Yapay Zeka Arama, metnin analizi sırasında bulunan çeşitlemeler de dahil olmak üzere terimlerin herhangi birini veya tümünü içeren belgelerle eşleşecektir.

Bu kulağa ne kadar basit gelse de, Azure Yapay Zeka Arama'te sorgu yürütmesinin bir yönü, giriş dizesine daha fazla terim ve işleç eklendikçe arama sonuçlarını azaltmak yerine beklenmedik sonuçlar üretebilir. Bu genişletmenin gerçekten gerçekleşip gerçekleşmediği, NOT işlecinin eklenmesine ve NOT'un AND veya OR davranışları açısından nasıl yorumlandığını belirleyen searchMode parametre ayarına bağlıdır. Daha fazla bilgi için NOT altındaki işlecine bakın.

Boole işleçleri

Bir eşleşmenin duyarlığını geliştirmek için sorgu dizesine Boole işleçleri ekleyebilirsiniz. Basit söz diziminde boole işleçleri karakter tabanlıdır. VE sözcüğü gibi metin işleçleri desteklenmez.

Karakter Örnek Kullanım
+ pool + ocean Bir AND işlem. Örneğin, pool + ocean belgenin her iki terimi de içermesi gerektiğini bildirir.
| pool | ocean Bir OR operasyon, herhangi bir terim bulunduğunda bir eşleşme bulur. Örnekte, sorgu altyapısı pool veya ocean ya da her ikisini içeren belgelerde bir eşleşme döndürür. OR varsayılan bağlaç işleci olduğundan, pool ocean, pool | ocean ile eşdeğerdir; bu nedenle bunu kullanmayabilirsiniz.
- pool – ocean Bir NOT işlemi, terimi dışlayan belgelerde eşleşmeleri döndürür.

searchMode Sorgu isteğindeki parametre, NOT operatörü taşıyan bir terimin diğer terimlerle AND veya OR edilip edilmediğini kontrol eder (diğer terimlerde boole işleçleri olmadığı varsayılarak). Geçerli değerler any veya all içerir.

searchMode=any daha fazla sonuç ekleyerek sorguların geri çekmesini artırır ve varsayılan olarak - "VEYA DEĞİl" olarak yorumlanır. Örneğin, pool - ocean terimini ya pool terimini içeren ya da ocean terimini içermeyen belgelerle eşleşecektir.

searchMode=all daha az sonuç ekleyerek sorguların duyarlığı artırır ve varsayılan olarak - "VE DEĞİl" olarak yorumlanır. Örneğin, searchMode=any ile, pool - ocean sorgusu "havuz" terimini içeren belgelerle ve "okyanus" terimini içermeyen tüm belgelerle eşleşir. Bu muhtemelen operatör için daha sezgisel bir davranıştır - . Bu nedenle, aramaları hatırlama yerine kesinlik için optimize etmek istiyorsanız searchMode=all kullanmayı searchMode=any düşünmelisiniz ve kullanıcılarınız aramalarda sık sık - işlecini kullanır.

Bir searchMode ayara karar verirken, çeşitli uygulamalardaki sorgular için kullanıcı etkileşim desenlerini göz önünde bulundurun. Daha yerleşik gezinti yapılarına sahip e-ticaret sitelerinden farklı olarak, bilgi arayan kullanıcıların sorgularına bir operatör ekleme olasılığı daha yüksektir.

Ön ek sorguları

"Ile başlar" sorguları için, terimin geri kalanı için yer tutucu olarak bir sonek işleci (*) ekleyin. Sonek işlecini ekleyebilmeniz için ön ek sorgusunun en az bir düz metin karakteriyle başlaması gerekir.

Karakter Örnek Kullanım
* lingui* "linguistic" veya "linguini" ile eşleşir Yıldız işareti (*), büyük/küçük harf yoksayılarak rastgele uzunlukta bir veya daha fazla karakteri temsil eder.

Filtrelere benzer şekilde, ön ek sorgusu da tam eşleşme arar. Bu nedenle, ilgi puanı yoktur (tüm sonuçlar 1,0 arama puanı alır). Özellikle dizin büyükse ve ön ek az sayıda karakterden oluşuyorsa ön ek sorgularının yavaş olabileceğini unutmayın. Kenar n gram belirteci oluşturma gibi alternatif bir yöntem daha hızlı çalışabilir. Ön ek araması kullanan terimler 1000 karakterden uzun olamaz.

Basit söz dizimi yalnızca ön ek eşleştirmeyi destekler. Bir terimin sonu veya ortası için sonek veya infix eşleştirme yaparken, Lucene'in joker karakter araması için tüm söz dizimini kullanın.

Arama operatörlerini kaçırma

Basit söz diziminde arama işleçleri şu karakterleri içerir: + | " ( ) ' \

Bu karakterlerden herhangi biri dizindeki bir belirtecin parçasıysa, sorguda önüne tek bir ters eğik çizgi (\) ekleyerek onu es geçin. Örneğin, tüm terim belirteci için özel bir çözümleyici kullandığınızı ve dizininizin "Luxury+Hotel" dizesini içerdiğini varsayalım. Bu belirteçte tam eşleşme elde etmek için bir kaçış karakteri ekleyin: search=luxury\+hotel.

Daha tipik durumlar için işleri basit hale getirmek için, bu kuralda kaçış gerekli olmayan iki özel durum vardır:

  • NOT işlecinin - yalnızca boşluktan sonraki ilk karakter olması durumunda kaçış olması gerekir. - ortada görünüyorsa (örneğin, içinde3352CDD0-EF30-4A2E-A512-3B30AF40F3FD), kaçışı atlayabilirsiniz.

  • Sonek işlecinin * yalnızca bir boşluktan önceki son karakter olduğunda kaçırılması gerekir. * ortada görünürse (örneğin, içinde4*4=16), kaçış gerekmez.

Not

Varsayılan olarak, standart çözümleyici kısa çizgiler, boşluklar, ampersandlar ve diğer karakterler üzerindeki sözcükleri leksik analiz sırasında siler ve böler. Sorgu dizesinde özel karakterlerin kalması gerekiyorsa, bunları dizinde koruyan bir çözümleyiciye ihtiyacınız olabilir. Bazı seçenekler arasında kısa çizgili sözcükleri koruyan Microsoft doğal language çözümleyicileri veya daha karmaşık desenler için özel çözümleyici bulunur. Daha fazla bilgi için bkz . Kısmi terimler, desenler ve özel karakterler.

URL'lerde güvenli olmayan ve ayrılmış karakterleri kodlama

Tüm güvenli olmayan ve ayrılmış karakterlerin url'de kodlandığından emin olun. Örneğin, URL'de parça/yer işareti tanımlayıcısı olduğundan '#' güvenli olmayan bir karakterdir. Karakter, URL'de kullanılıyorsa olarak kodlanmalıdır %23 . '& ' ve '=', parametreleri sınırlandıran ve Azure Yapay Zeka Arama değerleri belirten ayrılmış karakterlere örnektir. Daha fazla bilgi için bkz . RFC1738: Tekdüzen Kaynak Bulucuları (URL).

Güvenli olmayan karakterler " ` < > # % { } | \ ^ ~ [ ] şeklindedir. Ayrılmış karakterler şunlardır: ; / ? : @ = + &.

Özel karakterler

Özel karakterler , '$' veya '€' gibi para birimi simgelerinden emojilere kadar değişebilir. Varsayılan standart çözümleyici de dahil olmak üzere birçok çözümleyici, dizin oluşturma sırasında özel karakterleri dışlar, bu da dizininizde temsil edilmeyecekleri anlamına gelir.

Özel karakter gösterimine ihtiyacınız varsa bunları koruyan bir çözümleyici atayabilirsiniz:

  • Boşluk çözümleyicisi, boşluklarla ayrılmış tüm karakter dizilerini belirteç olarak değerlendirir (bu nedenle '❤' emojisi belirteç olarak kabul edilir).

  • Microsoft İngilizce çözümleyicisi () gibi en.microsoft , '$' veya '€' dizesini belirteç olarak alabilir.

Onay için bir çözümleyiciyi test edebilir ve belirli bir dize için hangi belirteçlerin oluşturulduğunu görebilirsiniz. Beklediğiniz gibi, tek bir çözümleyiciden tam belirteçleme alamayabilirsiniz. Geçici çözüm, aynı içeriği içeren ancak farklı çözümleyici atamalarıyla (dil çözümleyicileri için , description_endescription_frvb.) birden çok alan oluşturmaktır.

Unicode karakterleri kullanırken, sorgu URL'sinde sembollerin düzgün bir şekilde karşılandığından emin olun (örneğin, '❤' için kaçış dizisi %E2%9D%A4+ kullanılır). Bazı web istemcileri bu çeviriyi otomatik olarak yapar.

Öncelik (gruplandırma)

Parantez deyimi içindeki işleçler de dahil olmak üzere alt sorgular oluşturmak için ayraç kullanabilirsiniz. Örneğin, motel+(wifi|luxury) "motel" terimini ve "wifi" veya "lüks" (veya her ikisi) içeren belgeleri arar.

Sorgu boyutu sınırları

Uygulamanız program aracılığıyla arama sorguları oluşturuyorsa, bunu ilişkisiz boyutta sorgular oluşturmayabilecek şekilde tasarlamanızı öneririz.

  • GET için URL'nin uzunluğu 8 KB'ı aşamaz.

  • POST (ve diğer istekler) için, isteğin gövdesi search ve filter gibi diğer parametreleri içerdiğinde, maksimum boyut 16 MB'tır. Ek sınırlar şunlardır:

    • Arama yan tümcesinin uzunluk üst sınırı 100.000 karakterdir.
    • İçinde search olan en fazla koşul sayısı (VE veya VEYA ile ayrılmış ifadeler) 1024'tür.
    • Ön ek araması için arama terimi boyutu üst sınırı 1000 karakterdir.
    • Ayrıca bir sorgudaki tek tek terimlerin boyutu üzerinde yaklaşık 32 KB'lık bir sınır vardır.

Sorgu sınırları hakkında daha fazla bilgi için bkz. API isteği sınırları.

Sonraki adımlar

Sorguları program aracılığıyla oluştururken sorgu işleme aşamalarını ve metin analizinin etkilerini anlamak için Azure Yapay Zeka Arama içindeki Full metin aramasını gözden geçirin.

Sorgu oluşturma hakkında daha fazla bilgi edinmek için aşağıdaki makaleleri de gözden geçirebilirsiniz: