Azure Bilişsel Arama typeahead için bir dizine öneri araçları eklemeAdd suggesters to an index for typeahead in Azure Cognitive Search

Azure Bilişsel Arama 'de, "yazarken arama" veya typeahead işlevselliği, bir arama dizinineeklediğiniz bir öneri aracı yapısını temel alır.In Azure Cognitive Search, "search-as-you-type" or typeahead functionality is based on a suggester construct that you add to a search index. Bu, typeahead 'in etkinleştirilmesini istediğiniz bir veya daha fazla alanın listesidir.It's a list of one or more fields for which you want typeahead enabled.

Bir öneri aracı, yazmakta olduğunuz terimi veya tümceciği tamamlayan ve eşleşen belgelerin kısa bir listesini döndüren önerilerden oluşan iki typeahead çeşidini destekler: AutoComplete.A suggester supports two typeahead variants: autocomplete, which completes the term or phrase you are typing, and suggestions that return a short list of matching documents.

Aşağıdaki ekran görüntüsünde, örnek olarak ilk uygulamanızı oluşturma bölümünde C# typeahead gösterilmektedir.The following screenshot, from the Create your first app in C# sample, illustrates typeahead. Kullanıcının arama kutusuna girebileceği anticipates otomatik tamamlama.Autocomplete anticipates what the user might type into the search box. Gerçek giriş "tw" dir, bu da otomatik tamamlama "ın" ile biter ve olası arama terimi olarak "ikizi" olarak çözümleniyor.Actual input is "tw", which autocomplete finishes with "in", resolving as "twin" as the prospective search term. Öneriler, açılan listede görselleştirilir.Suggestions are visualized in the dropdown list. Öneriler için, sonucu en iyi açıklayan bir belgenin herhangi bir bölümünü yüzeyinize ekleyebilirsiniz.For suggestions, you can surface any part of a document that best describes the result. Bu örnekte, öneriler otel adlarıdır.In this example, the suggestions are hotel names.

Otomatik tamamlama ve önerilen sorguların görsel karşılaştırmasıVisual comparison of autocomplete and suggested queries

Bu davranışları Azure Bilişsel Arama uygulamak için bir dizin ve sorgu bileşeni vardır.To implement these behaviors in Azure Cognitive Search, there is an index and query component.

  • Dizinde bir öneri aracı ekleyin.In the index, add a suggester to an index. Portal, REST APIveya .NET SDK 'sınıkullanabilirsiniz.You can use the portal, REST API, or .NET SDK. Bu makalenin geri kalanında bir öneri aracı oluşturmaya odaklanılmıştır.The remainder of this article is focused on creating a suggester.

  • Sorgu isteğinde, aşağıda listelenen API'lerden birini çağırın.In the query request, call one of the APIs listed below.

Arama ölçütü türü, alan temelinde desteklenir.Search-as-you-type support is enabled on a per-field basis. Ekran görüntüsünde gösterilenle benzer bir deneyim istiyorsanız, aynı arama çözümü içinde her iki typeahead davranışını da uygulayabilirsiniz.You can implement both typeahead behaviors within the same search solution if you want an experience similar to the one indicated in the screenshot. Her iki istek de, bir Kullanıcı en az üç karakter girişi dizesi sağladıktan sonra, belirli dizin ve yanıtların belge koleksiyonunu hedefler.Both requests target the documents collection of specific index and responses are returned after a user has provided at least a three character input string.

Öneri oluşturucu oluşturmaCreate a suggester

Bir öneri aracı birçok özelliğe sahip olsa da, birincil olarak bir typeahead deneyimini etkinleştirilebilmeniz için bir alanlar koleksiyonudur.Although a suggester has several properties, it is primarily a collection of fields for which you are enabling a typeahead experience. Örneğin, bir seyahat uygulaması, hedefler, şehirler ve atlamalar üzerinde typeahead aramasını etkinleştirmek isteyebilir.For example, a travel app might want to enable typeahead search on destinations, cities, and attractions. Bu nedenle, üç alan de alanlar koleksiyonunda gider.As such, all three fields would go in the fields collection.

Bir öneri aracı oluşturmak için bir dizin şemasına bir tane ekleyin.To create a suggester, add one to an index schema. Bir dizinde (özellikle, öneri araçları koleksiyonunda bir öneri aracı) bir öneri aracı olabilir.You can have one suggester in an index (specifically, one suggester in the suggesters collection).

Ne zaman bir öneri aracı oluşturulur?When to create a suggester

Bir öneri aracı oluşturmak için en iyi zaman, alan tanımının kendisini de oluşturmaktır.The best time to create a suggester is when you are also creating the field definition itself.

Önceden var olan alanları kullanarak bir öneri aracı oluşturmaya çalışırsanız, API buna izin vermez.If you try to create a suggester using pre-existing fields, the API will disallow it. İki veya daha fazla karakter kombinasyondaki kısmi terimler, tüm koşullara göre simgeleştirilmiştir, dizin oluşturma sırasında typeahead metni oluşturulur.Typeahead text is created during indexing, when partial terms in two or more character combinations are tokenized alongside whole terms. Mevcut alanlar zaten simgeleştirilmiş olduğunda, bir öneri aracı eklemek istiyorsanız dizini yeniden oluşturmanız gerekir.Given that existing fields are already tokenized, you will have to rebuild the index if you want to add them to a suggester. Yeniden dizin oluşturma hakkında daha fazla bilgi için bkz. Azure bilişsel arama dizin oluşturma.For more information about reindexing, see How to rebuild an Azure Cognitive Search index.

REST API kullanarak oluşturmaCreate using the REST API

REST API Dizin oluşturma veya güncelleştirme diziniaracılığıyla öneri araçları ekleyin.In the REST API, add suggesters through Create Index or Update Index.

{
  "name": "hotels",
  "fields": [
    . . .
  ],
  "suggesters": [
    {
      "name": "sg",
      "searchMode": "analyzingInfixMatching",
      "sourceFields": ["hotelName", "category"]
    }
  ],
  "scoringProfiles": [
    . . .
  ]
}

.NET SDK kullanarak oluşturmaCreate using the .NET SDK

İçinde C#, bir öneri aracı nesnesitanımlayın.In C#, define a Suggester object. Suggesters bir koleksiyon ancak yalnızca bir öğe alabilir.Suggesters is a collection but it can only take one item.

private static void CreateHotelsIndex(SearchServiceClient serviceClient)
{
    var definition = new Index()
    {
        Name = "hotels",
        Fields = FieldBuilder.BuildForType<Hotel>(),
        Suggesters = new List<Suggester>() {new Suggester()
            {
                Name = "sg",
                SourceFields = new string[] { "HotelId", "Category" }
            }}
    };

    serviceClient.Indexes.Create(definition);

}

Özellik başvurusuProperty reference

ÖzellikProperty AçıklamaDescription
name Öneri aracı adı.The name of the suggester.
searchMode Aday tümcecikleri aramak için kullanılan strateji.The strategy used to search for candidate phrases. Şu anda desteklenen tek mod, Tümcelerin başındaki veya ortasındaki tümceciklerden esnek eşleme gerçekleştiren analyzingInfixMatching.The only mode currently supported is analyzingInfixMatching, which performs flexible matching of phrases at the beginning or in the middle of sentences.
sourceFields Önerilerin içerik kaynağı olan bir veya daha fazla alanın listesi.A list of one or more fields that are the source of the content for suggestions. Alanların Edm.String ve Collection(Edm.String)türünde olması gerekir.Fields must be of type Edm.String and Collection(Edm.String). Alanda bir çözümleyici belirtilmişse, Bu listeden bir adlandırılmış çözümleyici olmalıdır (özel çözümleyici değil).If an analyzer is specified on the field, it must be a named analyzer from this list (not a custom analyzer).

En iyi uygulama olarak, bir arama çubuğunda veya açılan listede bir tamamlanmış dize olup olmadığı için, yalnızca beklenen ve uygun bir yanıta ödünç veren alanları belirtin.As a best practice, specify only those fields that lend themselves to an expected and appropriate response, whether it's a completed string in a search bar or a dropdown list.

Bir otel adı duyarlık içerdiğinden iyi bir adaydır.A hotel name is a good candidate because it has precision. Açıklamalar ve açıklamalar gibi ayrıntılı alanlar çok yoğun.Verbose fields like descriptions and comments are too dense. Benzer şekilde, Kategoriler ve Etiketler gibi yinelenen alanlar daha az etkilidir.Similarly, repetitive fields, such as categories and tags, are less effective. Örneklerde, birden fazla alanı dahil etbileceğinizi göstermek için, "Category" de yer alır.In the examples, we include "category" anyway to demonstrate that you can include multiple fields.

Bir öneri aracı içindeki sourceFields için çözümleyici kısıtlamalarıAnalyzer restrictions for sourceFields in a suggester

Azure Bilişsel Arama, alan içeriğini çözümleyerek tek tek şartlar üzerinde sorgu yapmayı etkinleştirir.Azure Cognitive Search analyzes the field content to enable querying on individual terms. Öneri araçları, kaynak alanları üzerinde ek analizler gerektiren tüm koşullara ek olarak ön eklerin dizinlenmesini gerektirir.Suggesters require prefixes to be indexed in addition to complete terms, which requires additional analysis over the source fields. Özel çözümleyici yapılandırması, çeşitli belirteçlerin ve filtrelerin herhangi birini, genellikle öneriler için gerekli olan ön ekleri üreten yöntemlerle birleştirebilir.Custom analyzer configurations can combine any of the various tokenizers and filters, often in ways that would make producing the prefixes required for suggestions impossible. Bu nedenle, Azure Bilişsel Arama özel Çözümleyicileri olan alanların bir öneri aracı dahil edilmesini engeller.For this reason, Azure Cognitive Search prevents fields with custom analyzers from being included in a suggester.

Not

Yukarıdaki sınırlamaya geçici çözüm yapmanız gerekiyorsa, aynı içerik için iki ayrı alan kullanın.If you need to work around the above limitation, use two separate fields for the same content. Bu, diğer alanlardan birinin bir öneri aracı sahip olmasını sağlar, ancak diğeri özel bir çözümleyici yapılandırmasıyla ayarlanacaktır.This will allow one of the fields to have a suggester, while the other can be set up with a custom analyzer configuration.

Sorguda öneri aracı kullanmaUse a suggester in a query

Bir öneri aracı oluşturulduktan sonra, özelliği çağırmak için sorgu mantığınızdaki uygun API 'yi çağırın.After a suggester is created, call the appropriate API in your query logic to invoke the feature.

API kullanımı, AutoComplete REST API aşağıdaki çağrısında gösterilmiştir.API usage is illustrated in the following call to the Autocomplete REST API. Bu örnekte iki örnek vardır.There are two takeaways from this example. İlk olarak, tüm sorgularda olduğu gibi, işlem bir dizinin belgeler koleksiyonuna göre yapılır.First, as with all queries, the operation is against the documents collection of an index. İkinci olarak, sorgu parametreleri ekleyebilirsiniz.Second, you can add query parameters. Birçok sorgu parametresi her iki API için de yaygın olsa da, liste her biri için farklıdır.While many query parameters are common to both APIs, the list is different for each one.

GET https://[service name].search.windows.net/indexes/[index name]/docs/autocomplete?[query parameters]  
api-key: [admin or query key]

Dizinde tanımlı bir öneri aracı yoksa otomatik tamamlama veya önerilere çağrı başarısız olur.If a suggester is not defined in the index, a call to autocomplete or suggestions will fail.

Örnek kodSample code

  • Örnek olarak C# ilk uygulamanızı oluşturun , bir öneri aracı yapımı, önerilen sorgular, otomatik tamamlama ve çok yönlü gezinme gösterir.Create your first app in C# sample demonstrates a suggester construction, suggested queries, autocomplete, and faceted navigation. Bu kod örneği, korumalı alan Azure Bilişsel Arama hizmetinde çalışır ve tüm yapmanız gerekir. böylece, uygulamayı çalıştırmak için F5 'e basın.This code sample runs on a sandbox Azure Cognitive Search service and uses a pre-loaded Hotels index so all you have to do is press F5 to run the application. Abonelik ya da oturum açma gerekli değildir.No subscription or sign-in is necessary.

  • Dotnethowtoautocomplete , hem hem de C# Java kodunu içeren eski bir örnektir.DotNetHowToAutocomplete is an older sample containing both C# and Java code. Ayrıca, bir öneri aracı yapımı, önerilen sorgular, otomatik tamamlama ve çok yönlü gezinme gösterir.It also demonstrates a suggester construction, suggested queries, autocomplete, and faceted navigation. Bu kod örneği barındırılan NYCJobs örnek verilerini kullanır.This code sample uses the hosted NYCJobs sample data.

Sonraki adımlarNext steps

İsteklerin nasıl formül altında olduğunu görmek için aşağıdaki örneği öneririz.We recommend the following example to see how the requests are formulated.