Öneriler (Azure AI Arama REST API'si)
Öneriler isteği, öneride bulunan alanlarda eşleşen değerleri arayan ve eşleşme içeren belgeler döndüren, yazarken arama sorgusudur. Örneğin, bir şehir alanında önerileri etkinleştirirseniz, "deniz" yazılması söz konusu alan için "Seattle", "Sea Tac" ve "Seaside" (tüm gerçek şehir adları) içeren belgeler üretir.
Yanıt, eşleşen bir belgenin içeriği ve belge anahtarıdır. İkincil sorguda kullanılan tamamlanmış bir terimi veya tümceciği döndüren Otomatik Tamamlama'nın aksine, bu istek gerçek belgelere çözümlenen bilgileri döndürür. Eşleşen terimler veya tümcecikler belgeler arasında aynıysa, eşleşen içerik yinelenir. Sonuçların yapısını geliştirmek için filtreyi $select
kullanarak daha fazla farklılaşma ve bağlam sağlayan ek alanlar döndürebilirsiniz.
Hizmet istekleri için HTTPS gereklidir. Öneri isteği GET veya POST yöntemleri kullanılarak oluşturulabilir.
GET https://[service name].search.windows.net/indexes/[index name]/docs/suggest?[query parameters]
Content-Type: application/json
api-key: [admin or query key]
POST https://[service name].search.windows.net/indexes/[index name]/docs/suggest?api-version=[api-version]
Content-Type: application/json
api-key: [admin or query key]
Arama Belgeleri isteğinin aksine, klavye girişine Bir Öneriler çağrısı bağlayabilirsiniz, arama ise tıklama olayına bağlı olabilir.
GET ile çağrıldığında, istek URL'sinin uzunluğu 8 KB'yi aşamaz. Bu uzunluk genellikle çoğu uygulama için yeterlidir. Ancak, bazı uygulamalar özellikle OData filtre ifadeleri kullanıldığında çok büyük sorgular üretir. Bu uygulamalar için HTTP POST, GET'den daha büyük filtrelere izin verdiğinden daha iyi bir seçimdir.
POST ile, post için istek boyutu sınırı yaklaşık 16 MB olduğundan, filtredeki yan tümcelerin sayısı ham filtre dizesinin boyutu değil sınırlayıcı faktördür. POST isteği boyut sınırı çok büyük olsa da, filtre ifadeleri rastgele karmaşık olamaz. Filtre karmaşıklığı sınırlamaları hakkında daha fazla bilgi için bkz. Azure AI Search için OData İfade söz dizimi.
URI Parametreleri
Parametre | Açıklama |
---|---|
[hizmet adı] | Gereklidir. Bunu arama hizmetinizin benzersiz, kullanıcı tanımlı adı olarak ayarlayın. |
[dizin adı]/docs | Gereklidir. Adlandırılmış dizinin belge koleksiyonunu belirtir. |
api-sürümü | Gereklidir. Geçerli kararlı sürüm: api-version=2020-06-30 . Daha fazla sürüm için bkz. API sürümleri. Sorgular için api sürümü her zaman GET ve POST için bir URI parametresi olarak belirtilir. |
URL kodlama önerileri
GET REST API'sini doğrudan çağırırken URL kodlamaya özgü sorgu parametrelerini unutmayın. Öneriler işlemleri için bunlar şunları içerir:
- search
- $filter
- highlightPreTag
- highlightPostTag
URL kodlaması yalnızca tek tek parametreler için önerilir. Sorgu dizesinin tamamını (öğesinden ?
sonraki her şey) yanlışlıkla URL ile kodlarsanız istekler kesilecektir.
Ayrıca, URL kodlaması yalnızca REST API'yi doğrudan GET kullanarak çağırırken gereklidir. POST kullanarak Öneriler çağrılırken veya Azure AI Search .NET istemci kitaplığı kullanılırken URL kodlaması sizin için gerekli değildir.
İstek Üst Bilgileri
Aşağıdaki tabloda gerekli ve isteğe bağlı istek üst bilgileri açıklanmaktadır.
Alanlar | Description |
---|---|
İçerik Türü | Gereklidir. Bunu olarak ayarlayın application/json |
api-key | İsteğe bağlı olarak Azure rollerini kullanıyorsanız ve istekte taşıyıcı belirteci sağlanıyorsa bir anahtar gereklidir. Api anahtarı, arama hizmetinizde isteğin kimliğini doğrulayan benzersiz, sistem tarafından oluşturulan bir dizedir. Belge koleksiyonuna yönelik sorgu istekleri, API anahtarı olarak bir admin-key veya query-key belirtebilir. Sorgu anahtarı, belge koleksiyonunda salt okunur işlemler için kullanılır. Ayrıntılar için bkz. Anahtar kimlik doğrulamasını kullanarak Azure AI Search'e bağlanma . |
İstek Gövdesi
GET için: Yok.
POST için:
{
"filter": "odata_filter_expression",
"fuzzy": true | false (default),
"highlightPreTag": "pre_tag",
"highlightPostTag": "post_tag",
"minimumCoverage": # (% of index that must be covered to declare query successful; default 80),
"orderby": "orderby_expression",
"search": "partial_search_input",
"searchFields": "field_name_1, field_name_2, ...",
"select": "field_name_1, field_name_2, ...",
"suggesterName": "suggester_name",
"top": # (default 5)
}
Sorgu parametreleri
Sorgu, GET ile çağrıldığında URL'de çeşitli parametreleri ve POST ile çağrıldığında istek gövdesinde JSON özellikleri olarak kabul eder. Bazı parametrelerin söz dizimi GET ve POST arasında biraz farklıdır. Bu farklılıklar aşağıda uygulanabilir olarak not edilir.
Ad | Tür | Description |
---|---|---|
api-sürümü | string | Gereklidir. İstek için kullanılan REST API sürümü. Desteklenen sürümlerin listesi için bkz. API sürümleri. Bu işlem için API'yi GET veya POST ile çağırmanıza bakılmaksızın API sürümü URL'de sorgu parametresi olarak belirtilir. |
$filter | string | İsteğe bağlı. Öneriler için göz önünde bulundurulan belgeleri filtreleyen bir ifade. Filtrede yalnızca filtrelenebilir alanlar kullanılabilir. Otomatik Tamamlama API'sinde "search.ismatch" ve "search.ismatchscoring*" filtre ifadeleri desteklenmez. POST ile çağrıldığında, bu parametre $filter yerine filter olarak adlandırılır. Azure AI Search'ün desteklediği OData ifadesi dil bilgisi alt kümesiyle ilgili ayrıntılar için bkz. Azure AI Search için OData İfade Söz Dizimi. |
Bulanık | boolean | İsteğe bağlı. Varsayılan değer false şeklindedir. True olarak ayarlandığında, bu API arama metninde değiştirilen veya eksik bir karakter olsa bile öneriler bulur. Düzenleme uzaklığı, sorgu dizesi başına 1'dir. Sorgu dizesi birden çok terimse, dizenin tamamında yalnızca bir eksik, fazladan, değiştirilen veya çevrilmiş karakter olabilir. Belirsiz eşleşmenin etkinleştirilmesi bazı senaryolarda daha iyi bir deneyim olabilir; benzer öneri aramaları daha yavaş olduğundan ve daha fazla kaynak tükettiği için performans maliyetine neden olur. |
highlightPostTag | string | İsteğe bağlı. Varsayılan olarak boş bir dizedir. Vurgulanan terime eklenen bir dize etiketi. highlightPreTag ile ayarlanmalıdır. URL'deki ayrılmış karakterler yüzde kodlanmış olmalıdır (örneğin, #yerine %23). GET kullanılarak çağrıldığında, URL'deki ayrılmış karakterler yüzde kodlanmış olmalıdır (örneğin, #yerine %23). |
highlightPreTag | string | İsteğe bağlı. Varsayılan olarak boş bir dizeyi kullanır. Vurgulanan terimin başına eklenen bir dize etiketi. highlightPostTag ile ayarlanmalıdır. GET kullanılarak çağrıldığında, URL'deki ayrılmış karakterler yüzde kodlanmış olmalıdır (örneğin, #yerine %23). |
$orderby | string | İsteğe bağlı. Sonuçları sıralamak için virgülle ayrılmış ifadelerin listesi. Her ifade bir alan adı veya işlev çağrısı geo.distance() olabilir. Her ifadenin ardından "asc" (artan) veya "desc" (azalan) gelebilir. Varsayılan değer artan düzendir. $orderby için 32 yan tümce sınırı vardır. POST ile çağrıldığında, bu parametre $orderby yerine order olarak adlandırılır. |
minimumCoverage | tamsayı | İsteğe bağlı. Varsayılan değer 80'tir. Başarılı olarak raporlanmadan önce sorguya hizmet vermek için kullanılabilir olması gereken dizinin yüzdesini gösteren 0 ile 100 arasında bir sayı.
Varsayılan değer, tam kapsama göre hız ve verimlilikle ilgili bir önyargıyı yansıtır. Kapsamın azaltılması sorgu genişletmeyi kısıtlayarak sonuçların daha hızlı döndürülmesini sağlar. Ayrıca, hizmet durumu sorunları veya dizin bakımı nedeniyle bir parça yavaş yanıt verse veya kullanılamasa bile, kısmi dizin kullanılabilirliği sırasında sorgunun başarılı olmasını sağlar. minimumCoverage değeri ne olursa olsun, dizinin bu yüzdesinin kullanılabilir olması gerekir veya Öneriler HTTP durum kodu 503'i döndürür. Öneriler minimumCoverage düzeyinde başarılı olursa, HTTP 200 döndürür ve yanıtta sorguya bakım yaparken kullanılabilir olan dizinin yüzdesini gösteren bir @search.coverage değer içerir. 503 hataları oluşuyorsa bu değeri düşürmek yararlı olabilir. Aksi takdirde, yanıt yetersiz eşleşmeler sağlıyorsa değeri yükseltmeyi düşünebilirsiniz. |
search | string | Gereklidir. Sorgu önermek için kullanılacak arama metni. En az 1 karakter ve en fazla 100 karakter olmalıdır. İşleçler, sorgu söz dizimi veya tırnak içine alınmış tümcecikler içeremez. |
searchFields | string | İsteğe bağlı. Belirtilen arama metnini aramak için virgülle ayrılmış alan adları listesi. Hedef alanlar dizindeki Önerici tanımında listelenmelidir. |
$select | string | İsteğe bağlı. Alınacak virgülle ayrılmış alanların listesi. Belirtilmemişse, yalnızca belge anahtarı ve öneri metni döndürülür. Bu parametreyi * olarak ayarlayarak tüm alanları açıkça isteyebilirsiniz. POST ile çağrılırken, bu parametre $select yerine select olarak adlandırılır. |
suggesterName | string | Gereklidir. Önericinin dizin tanımının bir parçası olan Suggesters koleksiyonunda belirtildiği gibi adı. Önerilen sorgu terimleri için hangi alanların tarandığını bir öneri oluşturucu belirler. |
$top | tamsayı | İsteğe bağlı. Varsayılan olarak 5' tir). Alınacak otomatik olarak tamamlanan önerilerin sayısı. Değer 1 ile 100 arasında bir sayı olmalıdır. POST ile çağrılırken, bu parametre $top yerine top olarak adlandırılır. |
Yanıt
Durum Kodu: Başarılı bir yanıt için "200 Tamam" döndürülür.
{
"@search.coverage": # (if minimumCoverage was provided in the query),
"value": [
{
"@search.text": "...",
"<key field>": "..."
},
...
]
}
Alanları almak için projeksiyon seçeneği kullanılırsa, bunlar dizinin her öğesine eklenir:
{
"value": [
{
"@search.text": "...",
"<key field>": "..."
<other projected data fields>
},
...
]
}
Örnekler
Kısmi arama girişinin 'lux' olduğu 5 öneriyi alın:
GET /indexes/hotels/docs/suggest?search=lux&$top=5&suggesterName=sg&api-version=2020-06-30
POST /indexes/hotels/docs/suggest?api-version=2020-06-30
{
"search": "lux",
"top": 5,
"suggesterName": "sg"
}
Öneri işleminde suggesterName'in gerekli olduğuna dikkat edin.