Azure AI Search'te basit sorgu söz dizimi

Tam metin arama senaryoları için Azure AI Search, her biri bir 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ğinin parametresinde search geçirilen sorgu ifadeleri için geçerlidir; kendi söz dizimi ve aynı istekteki ve orderby ifadeleri için filter kurallarla OData söz dizimi ile karıştırılmamalıdır.

Basit ayrıştırıcı Apache Lucene Basit Sorgu Ayrıştırıcısı sınıfını temel alsa da, Azure AI Search'teki uygulaması belirsiz aramayı dışlar. Benzer aramaya ihtiyacınız varsa bunun yerine alternatif tam Lucene sorgu söz dizimini göz önünde bulundurun.

Örnek (basit söz dizimi)

Bu örnek, ve geçerli söz dizimi ile "queryType": "simple" 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=2020-06-30
{
  "queryType": "simple",
  "search": "budget hotel +pool",
  "searchMode": "all"
}

searchMode parametresi bu örnekte geçerlidir. Sorguda boole işleçleri olduğunda, genellikle tüm ölçütlerin eşleştiğinden emin olmak için ayarlamanız searchMode=all gerekir. Aksi takdirde, duyarlık yerine geri çekmeyi tercih eden varsayılan searchMode=any değeri 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 tümcecikler, boole işleçleri, öncelik işleçleri, "ile başlar" sorguları, kaçış karakterleri ve URL kodlama karakterleri için joker karakter veya ön ek karakterleri 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.

  • Tümcecik araması , tırnak içine " "alınmış tam bir tümceciktir. Örneğin, (tırnak işaretleri olmadan) herhangi bir sırada "Roach Motel" ve/veya Motel herhangi bir yeri içeren Roach belgeleri ararken Roach Motel (tırnak işaretleri ile), yalnızca tümceciği birlikte ve bu sırada içeren belgelerle eşleşir (sözcük temelli 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, post isteğinde, istek gövdesinde üzerinde "Roach Motel" bir tümcecik araması olarak "\"Roach Motel\""belirtilebilir. Azure SDK'larını 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 AI Search, 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 AI Search'te sorgu yürütmenin beklenmeyen sonuçlara neden olabilecek bir yönü vardır ve giriş dizesine daha fazla terim ve işleç eklendikçe arama sonuçları azalır. Bu genişletmenin gerçekten gerçekleşip gerçekleşmediği, NOT işlecinin eklenmesine bağlıdır ve NOT'un veya OR davranışları açısından AND nasıl yorumlandığını belirleyen bir searchMode parametre ayarıyla birlikte kullanılır. Daha fazla bilgi için Boole işleçleri 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 terim bulunduğunda bir işlem eşleşme bulur. Örnekte, sorgu altyapısı ya da ocean her ikisini içeren pool belgelerde bir eşleşme döndürür. OR Varsayılan bağlaç işleci olduğundan, eşdeğeri olacak şekilde pool oceanpool | oceanbunu dışarıda bırakabilirsiniz.
- pool – ocean İşlem NOT , terimi dışlayan belgelerde eşleşmeler döndürür.

searchMode Sorgu isteğindeki parametre, işleçli ANDbir terimin NOT sorgudaki diğer terimlerle (diğer terimlerde boole işleçleri olmadığı varsayılarak) ed veya ORed olup olmadığını denetler. Geçerli değerler veya değerlerini içerir anyall.

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 veya terimini pooloceaniçermeyen belgeleri eşleştirecektir.

searchMode=all daha az sonuç ekleyerek sorguların duyarlığı artırır ve varsayılan olarak - "VE DEĞİl" olarak yorumlanır. Örneğin ile, sorgu pool - ocean "havuz" terimini içeren belgelerle ve "okyanus" terimini içermeyen tüm belgelerle searchMode=anyeşleşir. Bu muhtemelen operatör için daha sezgisel bir davranıştır - . Bu nedenle, aramaları geri çağırmak yerine searchMode=any duyarlık için iyileştirmek istiyorsanız yerine kullanmayı searchMode=all düşünmelisiniz ve Kullanıcılarınız aramalarda işlecini sık sık 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 sitelerinin aksine, bilgi arayan kullanıcıların sorguya bir işleç 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 önce ön ek sorgusunun en az bir alfasayısal karakterle 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 sonunda veya ortasında sonek veya infix eşleştirmesi için joker karakter araması için tam Lucene söz dizimini kullanın.

Kaçış arama işleçleri

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

Bu karakterlerden herhangi biri dizindeki bir belirtecin parçasıysa, sorguya tek bir ters eğik çizgi (\) ekleyerek bu belirteçten kurtulun. Ö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 boşluktan önceki son karakter olması durumunda kaçış olması gerekir. * ortada görünürse (örneğin, içinde4*4=16), kaçış gerekmez.

Not

Varsayılan olarak, standart çözümleyici sözcük temelli analiz sırasında kısa çizgi, boşluk, ve işareti ve diğer karakterlerdeki sözcükleri 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 hecelenmiş sözcükleri koruyan Microsoft doğal dil çözümleyicileri veya daha karmaşık desenler için özel bir çö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 '=', Azure AI Search'te parametreleri sınırlandıran ve 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 (en.microsoft gibi) bir dil çözümleyicisi belirteç olarak '$' veya '€' dizesini alır.

Onay için bir çözümleyiciyi test edebilir ve belirli bir dize için hangi belirteçlerin oluşturulduğunu görebilirsiniz. Bekleyebileceğiniz gibi, tek bir çözümleyiciden tam belirteç oluşturma işlemi 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 simgelerin düzgün bir şekilde kaçıldığı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övdesinin ve gibi filterorderbydiğer parametreleri içerdiği search durumlarda maksimum boyut 16 MB'tır. Ek sınırlar şunlardır:

    • Arama yan tümcesinin uzunluk üst sınırı 100.000 karakterdir.
    • içindeki search en fazla yan tümce 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şturacaksanız, sorgu işleme aşamalarını ve metin analizinin etkilerini anlamak için Azure AI Search'te tam metin araması sayfası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: