Otomatik tamamlama (Azure AI Arama REST API'si)
Otomatik Tamamlama API'si, ikincil sorguda kullanmak üzere arama dizinindeki mevcut terimleri kullanarak kısmen yazılan bir sorgu girişini tamamlar. Örneğin, sorgu girişi ise"medic"
, bu terimler dizindeyse, Otomatik Tamamlama API'si "medicine"
döndürür"medicare"
"medicaid"
. Arama altyapısı dahili olarak, Bir Öneri oluşturucu yapılandırılmış alanlarda eşleşen terimleri arar.
Hizmet istekleri için HTTPS gereklidir. Otomatik Tamamlama isteği GET veya POST yöntemleri kullanılarak oluşturulabilir.
GET https://[service name].search.windows.net/indexes/[index name]/docs/autocomplete?[query parameters]
Content-Type: application/json
api-key: [admin or query key]
POST https://[service name].search.windows.net/indexes/[index name]/docs/autocomplete?api-version=[api-version]
Content-Type: application/json
api-key: [admin or query key]
GET ile çağrıldığında istek URL'sinin uzunluğu 8 KB'ı 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, GET'den daha büyük filtrelere izin verdiği için HTTP POST 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 Araması 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. Desteklenen sürümlerin listesi için bkz. API sürümleri. Sorgular için api sürümü her zaman HEM GET hem de POST için bir URI parametresi olarak belirtilir. |
URL kodlama önerileri
GET REST API'sini doğrudan çağırırken BELIRLI sorgu parametrelerini URL ile kodlamayı unutmayın. Otomatik Tamamlama için URL kodlaması aşağıdaki sorgu parametreleri için gerekli olabilir:
- search
- $filter
- highlightPreTag
- highlightPostTag
URL kodlaması yalnızca bağımsız parametreler için önerilir. Tüm sorgu dizesini (öğesinden ?
sonraki her şey) yanlışlıkla URL ile kodlarsanız istekler bozulacaktır.
Ayrıca, URL kodlaması yalnızca REST API'yi doğrudan GET kullanarak çağırırken gereklidir. POST kullanırken veya kodlamayı sizin için işleyen Azure AI Search .NET istemci kitaplığını kullanırken URL kodlaması gerekmez.
İ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ı belirteç sağlanırsa, aksi takdirde bir anahtar gereklidir. Koleksiyona yönelik docs sorgu istekleri olarak bir admin-key veya query-key api-key belirtebilir. Sorgu anahtarı, dizin belgeleri 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:
{
"autocompleteMode": "oneTerm" (default) | "twoTerms" | "oneTermWithContext",
"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),
"search": "partial_search_input",
"searchFields": "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 alınmaktadır.
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ümü oluşturma. Bu işlem için API sürümü, GET veya POST ile Otomatik Tamamlama'yı çağırmanıza bakılmaksızın bir URI parametresi olarak belirtilir. |
Autocompletemode | string | İsteğe bağlı. Varsayılan olarak oneTerm'yi kullanır. Geçerli değerler oneTerm, twoTerms, oneTermWithContext değerleridir.
oneTerm tek bir terim döndürür. Sorgunun iki terimi varsa, yalnızca son terim tamamlanır. Örneğin, verilen "washington medic" yanıt şu tek terimlerden biri olabilir: "medicaid" , "medicare" , "medicine" .
twoTerms, dizindeki iki terimli tümceciklerle eşleşir. Örneğin, verilen "medic" yanıt veya "medical assistant" olabilir"medicare coverage" . Çoğu durumda, eşleşen iki terimli tümcecikler tercih edildiğinden tek "medicare" terimler döndürülür veya "medical" döndürülemez.oneTermWithContext sorgudaki son terimi iki veya daha fazla terimle tamamlar; burada son iki terim dizinde bulunan bir tümceciktir. Örneğin, verilen "washington medic" yanıt , "washington medical" olabilir"washington medicaid" . |
$filter | string | İsteğe bağlı. Standart OData söz diziminde, tamamlanmış terim önerilerini üretmek için dikkate alınan belgeleri filtreleyen yapılandırılmış bir arama ifadesi. "search.ismatch" ve "search.ismatchscoring*" filtre ifadeleri Otomatik Tamamlama API'sinde desteklenmez. Filtrede yalnızca filtrelenebilir alanlar kullanılabilir. POST ile çağrıldığında, bu parametre $filter yerine filter olarak adlandırılır. Azure AI Search'ün desteklediği OData ifade dil bilgisinin 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 (1) değiştirilen veya eksik bir karakter olsa bile öneriler bulur. Bu, bazı senaryolarda daha iyi bir deneyim sağlar, ancak 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 dizeyi kullanır. Vurgulanan terime eklenen bir dize etiketi. highlightPreTag ile ayarlanmalıdır. URL'deki ayrılmış karakterler yüzde kodlamalı 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 dizedir. Vurgulanan terime ön ekleyen 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). |
minimumCoverage | tamsayı | İsteğe bağlı. Varsayılan değer 80'tir. Başarılı olarak bildirilmeden ö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ıza ve verimliliğe yönelik bir yanlılık yansıtır. Kapsamın azaltılması sorgu genişletmesini 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 sorgunun kısmi dizin kullanılabilirliği üzerinde başarılı olmasını sağlar. minimumCoverage değeri ne olursa olsun, dizinin bu yüzdesinin kullanılabilir olması gerekir veya Otomatik Tamamlama 503 HTTP durum kodunu döndürür. Otomatik Tamamlama minimum Toplam düzeyinde başarılı olursa HTTP 200 döndürür ve yanıtta sorguya hizmet ederken kullanılabilen 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. Aranacak metin. Tamamlayacak 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ının listesi. Hedef alanlar dizindeki Önerici tanımında listelenmelidir. |
suggesterName | string | Gereklidir. Dizin tanımının parçası olan Suggesters koleksiyonunda belirtilen önericinin adı. Önerilen sorgu terimleri için hangi alanların tarandığını bir öneri oluşturucu belirler. |
$top | tamsayı | İsteğe bağlı. Varsayılan değer 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ıldığında, bu parametre $top yerine top olarak adlandırılır. |
(1) Otomatik Tamamlamada belirsizlik sınırlamaları:
İlk olarak, aramadaki benzer parametreden farklı olarak düzenleme uzaklığı belirteç başına yalnızca bir karakter farkıyla sınırlıdır. Düzenleme uzaklığı bir karakterle sınırlandığında tüm aday eşleşmeleri bulunamaz, ancak kabul edilebilir bir performans düzeyi sağlamak için üst sınır gereklidir.
İkincisi, belirsiz adım kısmi belirteç genişletmesinden sonra gerçekleşir ve benzer eşleşmeler için yalnızca aynı dizin parçasındaki terimler dikkate alınır. Bu kısıtlama, tüm parçalar üzerinde benzer eşleşmelerin toplamını ortadan kaldırarak Otomatik Tamamlama API'sinin performansını artırır. Dizine daha fazla terim eklendikçe bu kısıtlama daha az fark edilir hale gelir ve her parça için benzer terim dağılımı elde edilir. Terimler eşit dağıtıldığı için, parça içindeki benzer eşleşmeler, dizinin tamamında benzer eşleşmelerin iyi bir tahminidir. Ancak, dizinin test veya prototip dizini gibi daha az terime sahip olması durumunda sonuçlar daha az olabilir ve bu da parçalar arasında eşit olmayan bir gösterimle sonuçlanabilir. Dizinlerin parçalara nasıl bölündüğü hakkında daha fazla bilgi için bkz. bölüm ve çoğaltma bileşimleri.
Yanıt
Durum Kodu: Başarılı bir yanıt için "200 Tamam" döndürülür.
Yanıt yükünün iki özelliği vardır.
Özellik | Açıklama |
---|---|
"metin" | Tamamlanan terim veya tümcecik |
"queryPlusText" | İlk sorgu girişi artı tamamlanmış terim veya tümcecik |
{
"@search.coverage": # (if minimumCoverage was provided in the query),
"value": [
{
"text": "...",
"queryPlusText": "..."
},
...
]
}
Örnekler
Örnek 1: Kısmi arama girişinin varsayılan modla (oneTerm) olduğu 'washington medic'
üç otomatik tamamlama önerisini alın:
GET /indexes/insurance/docs/autocomplete?search=washington%20medic&$top=3&suggesterName=sg&api-version=2020-06-30
POST /indexes/insurance/docs/autocomplete?api-version=2020-06-30
{
"search": "washington medic",
"filter": "search.in(roleId, 'admin,manager')",
"top": 3,
"suggesterName": "sg"
}
Yanıt:
{
"value": [
{
"text": "medicaid",
"queryPlusText": "washington medicaid"
},
{
"text": "medicare",
"queryPlusText": "washington medicare"
},
{
"text": "medicine",
"queryPlusText": "washington medicine"
}
]
}
Örnek 2: Kısmi arama girişinin ve autocompleteMode=twoTerms
olduğu 'washington medic'
üç otomatik tamamlama önerisini alın:
GET /indexes/insurance/docs/autocomplete?search=washington%20medic&$top=3&suggesterName=sg&autocompleteMode=twoTerms&api-version=2020-06-30
POST /indexes/insurance/docs/autocomplete?api-version=2020-06-30
{
"search": "washington medic",
"autocompleteMode": "twoTerms",
"filter": "planDuration ge 1",
"top": 3,
"suggesterName": "sg"
}
Yanıt:
{
"value": [
{
"text": "medicaid insurance",
"queryPlusText": "washington medicaid insurance"
},
{
"text": "medicare plan",
"queryPlusText": "washington medicare plan"
},
{
"text": "medicine book",
"queryPlusText": "washington medicine book"
}
]
}
Bir Otomatik Tamamlama işleminde suggesterName öğesinin gerekli olduğuna dikkat edin.