Azure Bilişsel Arama çok yönlü gezintiyi uygulamaHow to implement faceted navigation in Azure Cognitive Search

Çok yönlü gezinme, arama uygulamalarında kendine yönelik ayrıntıya gidilme gezinmesi sağlayan bir filtreleme mekanizmasıdır.Faceted navigation is a filtering mechanism that provides self-directed drilldown navigation in search applications. ' Çok yönlü gezinme ' terimi tanıdık olmayabilir, ancak büyük olasılıkla daha önce kullandınız.The term 'faceted navigation' may be unfamiliar, but you've probably used it before. Aşağıdaki örnekte gösterildiği gibi, çok yönlü gezinme sonuçları filtrelemek için kullanılan kategorilerden herhangi bir şey değildir.As the following example shows, faceted navigation is nothing more than the categories used to filter results.

Azure Bilişsel Arama Iş portalı tanıtımıAzure Cognitive Search Job Portal Demo

Çok yönlü gezinme, arama için alternatif bir giriş noktasıdır.Faceted navigation is an alternative entry point to search. El ile karmaşık arama ifadeleri yazmak için kullanışlı bir alternatif sunar.It offers a convenient alternative to typing complex search expressions by hand. Modeller, aradığınızı bulmanıza yardımcı olabilir, ancak sıfır sonuçları elde etmeyin.Facets can help you find what you're looking for, while ensuring that you don’t get zero results. Geliştirici olarak, modeller arama dizininize gitmek için en faydalı arama ölçütlerini sergilemenizi sağlar.As a developer, facets let you expose the most useful search criteria for navigating your search index. Çevrimiçi perakende uygulamalarında, çok yönlü gezinme genellikle markalar, departmanlar (çocukların ayakları), boyut, Fiyat, popülerlik ve derecelendirmelere göre oluşturulmuştur.In online retail applications, faceted navigation is often built over brands, departments (kid’s shoes), size, price, popularity, and ratings.

Çok yönlü gezintiyi uygulama, arama teknolojileri arasında farklılık gösterir.Implementing faceted navigation differs across search technologies. Azure Bilişsel Arama 'de, çok yönlü gezinme, daha önce şemanıza sahip olduğunuz alanları kullanarak sorgu zamanında oluşturulur.In Azure Cognitive Search, faceted navigation is built at query time, using fields that you previously attributed in your schema.

  • Uygulamanızın derlemedeki sorgularda, bu belge sonuç kümesi için kullanılabilir model filtresi değerlerini almak üzere bir sorgunun model sorgu parametrelerini gönderebilmesi gerekir.In the queries that your application builds, a query must send facet query parameters to get the available facet filter values for that document result set.

  • Belge sonuç kümesini gerçekten kırpmak için, uygulamanın Ayrıca bir $filter ifadesi uygulaması gerekir.To actually trim the document result set, the application must also apply a $filter expression.

Uygulama geliştirmede, sorgu oluşturan kod yazmak çalışmanın toplu işini oluşturur.In your application development, writing code that constructs queries constitutes the bulk of the work. Çok yönlü gezinmede bekleeceğiniz uygulama davranışlarından birçoğu, Aralık tanımlamaya ve model sonuçları için sayıları almaya yönelik yerleşik destek de dahil olmak üzere hizmet tarafından sağlanır.Many of the application behaviors that you would expect from faceted navigation are provided by the service, including built-in support for defining ranges and getting counts for facet results. Hizmet Ayrıca, farkında olmayan gezinti yapıtlarından kaçınmanıza yardımcı olan, senerişilebilir varsayılanlar içerir.The service also includes sensible defaults that help you avoid unwieldy navigation structures.

Örnek kod ve tanıtımSample code and demo

Bu makale örnek olarak bir iş arama portalı kullanır.This article uses a job search portal as an example. Örnek, bir ASP.NET MVC uygulaması olarak uygulanır.The example is implemented as an ASP.NET MVC application.

BaşlarkenGet started

Arama geliştirmeye yeni başladıysanız, çok yönlü gezinme yapmanın en iyi yolu, kendi kendine yönlendirilmiş arama olasılıklarını gösterir.If you're new to search development, the best way to think of faceted navigation is that it shows the possibilities for self-directed search. Bu, arama sonuçlarını nokta ve tıklama eylemleri aracılığıyla hızlıca daraltmak için kullanılan, önceden tanımlanmış filtreleri temel alan detaya gitme arama deneyiminin bir türüdür.It’s a type of drill-down search experience, based on predefined filters, used for quickly narrowing down search results through point-and-click actions.

Etkileşim modeliInteraction model

Çok yönlü gezinme için arama deneyimi yinelemelidir, bu nedenle bunu kullanıcı eylemlerine yanıt olarak katlanan bir sorgu dizisi olarak öğrenerek başlayalım.The search experience for faceted navigation is iterative, so let’s start by understanding it as a sequence of queries that unfold in response to user actions.

Başlangıç noktası, genellikle Periphery üzerine yerleştirilmiş olan, çok yönlü gezinme sağlayan bir uygulama sayfasıdır.The starting point is an application page that provides faceted navigation, typically placed on the periphery. Çok yönlü gezinme, genellikle her bir değer için onay kutuları veya tıklatılabilir metinler içeren bir ağaç yapısıdır.Faceted navigation is often a tree structure, with checkboxes for each value, or clickable text.

  1. Azure Bilişsel Arama gönderilen bir sorgu, bir veya daha fazla model sorgu parametresi aracılığıyla çok yönlü gezinti yapısını belirtir.A query sent to Azure Cognitive Search specifies the faceted navigation structure via one or more facet query parameters. Örneğin, sorgu facet=Ratingiçerebilir; belki de sunuyu daha da belirginleştirmek için :values veya :sort seçeneği olabilir.For instance, the query might include facet=Rating, perhaps with a :values or :sort option to further refine the presentation.
  2. Sunu katmanı, istekte belirtilen modelleri kullanarak çok yönlü gezinme sağlayan bir arama sayfası oluşturur.The presentation layer renders a search page that provides faceted navigation, using the facets specified on the request.
  3. Derecelendirme içeren çok yönlü bir gezinti yapısı verildiğinde, yalnızca 4 veya üzeri derecelendirmesine sahip ürünlerin gösterilmesi gerektiğini göstermek için "4" tıklayabiliyorsunuz.Given a faceted navigation structure that includes Rating, you click "4" to indicate that only products with a rating of 4 or higher should be shown.
  4. Yanıt olarak, uygulama $filter=Rating ge 4 içeren bir sorgu gönderirIn response, the application sends a query that includes $filter=Rating ge 4
  5. Sunu katmanı, yalnızca yeni ölçütlere uyan öğeleri (Bu örnekte 4 ve üzeri) karşılayan öğeleri içeren, daha düşük bir sonuç kümesi göstererek sayfayı güncelleştirir.The presentation layer updates the page, showing a reduced result set, containing just those items that satisfy the new criteria (in this case, products rated 4 and up).

Bir model bir sorgu parametresidir, ancak sorgu girişi ile karıştırmayın.A facet is a query parameter, but do not confuse it with query input. Bir sorguda seçim ölçütü olarak hiçbir şekilde kullanılmaz.It is never used as selection criteria in a query. Bunun yerine, model sorgu parametrelerini yanıta geri gelen gezinti yapısına giriş olarak düşünün.Instead, think of facet query parameters as inputs to the navigation structure that comes back in the response. Sağladığınız her model sorgu parametresi için, Azure Bilişsel Arama her bir model değerinin kısmi sonuçlarında kaç belgenin olduğunu değerlendirir.For each facet query parameter you provide, Azure Cognitive Search evaluates how many documents are in the partial results for each facet value.

4. adımdaki $filter dikkat edin.Notice the $filter in step 4. Filtre, çok yönlü bir gezintinin önemli bir yönüdür.The filter is an important aspect of faceted navigation. Modeller ve filtreler API 'ye bağımsız olsa da, istediğiniz deneyimi sağlamak için her ikisi de gereklidir.Although facets and filters are independent in the API, you need both to deliver the experience you intend.

Uygulama tasarım kalıbıApp design pattern

Uygulama kodunda, model, çok yönlü gezinti yapısını, model sonuçları ve bir $filter ifadesiyle birlikte döndürmek için model sorgu parametrelerini kullanmaktır.In application code, the pattern is to use facet query parameters to return the faceted navigation structure along with facet results, plus a $filter expression. Filtre ifadesi, model değerindeki Click olayını işler.The filter expression handles the click event on the facet value. Sunu katmanına döndürülen arama sonuçlarının gerçek bölünmesi arkasındaki kod olarak $filter ifadesini düşünün.Think of the $filter expression as the code behind the actual trimming of search results returned to the presentation layer. Renkler modeli verildiğinde, kırmızı renge tıklanması yalnızca kırmızı rengi olan öğeleri seçen $filter ifadesiyle uygulanır.Given a Colors facet, clicking the color Red is implemented through a $filter expression that selects only those items that have a color of red.

Sorgu temelleriQuery basics

Azure Bilişsel Arama, bir veya daha fazla sorgu parametresi aracılığıyla bir istek belirtilir (her birinin açıklaması için bkz. arama belgeleri ).In Azure Cognitive Search, a request is specified through one or more query parameters (see Search Documents for a description of each one). Sorgu parametrelerinden hiçbiri gerekli değildir, ancak sorgunun geçerli olabilmesi için en az bir tane olmalıdır.None of the query parameters are required, but you must have at least one in order for a query to be valid.

Önemli olmayan isabetlerin filtreleyebilme özelliği olarak anlaşıldığı duyarlık, bu ifadelerden biri veya her ikisi üzerinden elde edilir:Precision, understood as the ability to filter out irrelevant hits, is achieved through one or both of these expressions:

  • ara =search=
    Bu parametrenin değeri, arama ifadesini oluşturur.The value of this parameter constitutes the search expression. Tek bir metin parçası veya birden çok terim ve işleç içeren bir karmaşık arama ifadesi olabilir.It might be a single piece of text, or a complex search expression that includes multiple terms and operators. Sunucusunda, tam metin araması için bir arama ifadesi kullanılır, bu arada eşleşen terimler için dizinde aranabilir alanları sorgular ve sonuçları sıra sırasına geri döndürür.On the server, a search expression is used for full-text search, querying searchable fields in the index for matching terms, returning results in rank order. search null olarak ayarlarsanız, sorgu yürütme tüm dizinin (yani, search=*) üzerinde olur.If you set search to null, query execution is over the entire index (that is, search=*). Bu durumda, $filter veya Puanlama profili gibi sorgunun diğer öğeleri, ($filter) ve hangi sırada (scoringProfile ya da $orderby) hangi belgelerin döndürüleceğini etkileyen birincil faktörlerdir.In this case, other elements of the query, such as a $filter or scoring profile, are the primary factors affecting which documents are returned ($filter) and in what order (scoringProfile or $orderby).

  • $filter =$filter=
    Filtre, belirli belge özniteliklerinin değerlerine göre arama sonuçlarının boyutunu sınırlamak için güçlü bir mekanizmadır.A filter is a powerful mechanism for limiting the size of search results based on the values of specific document attributes. Önce bir $filter değerlendirilir ve her bir değer için kullanılabilir değerleri ve karşılık gelen sayıları üreten bir mantık mantığı gelirA $filter is evaluated first, followed by faceting logic that generates the available values and corresponding counts for each value

Karmaşık arama ifadeleri sorgunun performansını düşürür.Complex search expressions decrease the performance of the query. Mümkün olduğunda duyarlık arttırmak ve sorgu performansını artırmak için iyi oluşturulmuş filtre ifadeleri kullanın.Where possible, use well-constructed filter expressions to increase precision and improve query performance.

Bir filtrenin daha fazla duyarlık eklemesi hakkında daha iyi anlamak için, bir karmaşık arama ifadesini filtre ifadesi içeren bir ile karşılaştırın:To better understand how a filter adds more precision, compare a complex search expression to one that includes a filter expression:

  • GET /indexes/hotel/docs?search=lodging budget +Seattle –motel +parking
  • GET /indexes/hotel/docs?search=lodging&$filter=City eq ‘Seattle’ and Parking and Type ne ‘motel’

Her iki sorgu de geçerlidir, ancak Seattle 'da Park ile Motels olmayan bir for arıyorsanız ikincisi üstün bir düzeydir.Both queries are valid, but the second is superior if you’re looking for non-motels with parking in Seattle.

  • İlk sorgu ad, açıklama ve aranabilir verileri içeren diğer alanlar gibi dize alanlarında bahsedilmekte olan veya söz konusu belirli kelimeleri kullanır.The first query relies on those specific words being mentioned or not mentioned in string fields like Name, Description, and any other field containing searchable data.
  • İkinci sorgu, yapılandırılmış veriler üzerinde kesin eşleşmeler arar ve çok daha doğru olabilir.The second query looks for precise matches on structured data and is likely to be much more accurate.

Çok yönlü gezinme içeren uygulamalarda, çok yönlü bir gezinti yapısı üzerinde her bir kullanıcı eyleminin, arama sonuçlarının bir daraltma ile birlikte geldiğinden emin olun.In applications that include faceted navigation, make sure that each user action over a faceted navigation structure is accompanied by a narrowing of search results. Sonuçları daraltmak için bir filtre ifadesi kullanın.To narrow results, use a filter expression.

Çok yönlü bir gezinti uygulaması oluşturunBuild a faceted navigation app

Azure Bilişsel Arama ile, arama isteğini oluşturan uygulama kodunuzda çok yönlü bir gezinti uygulabiliyorsunuz.You implement faceted navigation with Azure Cognitive Search in your application code that builds the search request. Çok yönlü gezinme, şemanızda daha önce tanımladığınız öğeleri kullanır.The faceted navigation relies on elements in your schema that you defined previously.

Arama dizininizdeki ön tanımlı Facetable [true|false] Dizin özniteliğidir ve kullanımı çok yönlü bir gezinti yapısında kullanımını etkinleştirmek veya devre dışı bırakmak için seçili alanlar üzerinde ayarlanır.Predefined in your search index is the Facetable [true|false] index attribute, set on selected fields to enable or disable their use in a faceted navigation structure. "Facetable" = trueolmadan, model gezintide bir alan kullanılamaz.Without "Facetable" = true, a field cannot be used in facet navigation.

Kodunuzda sunum katmanı Kullanıcı deneyimini sağlar.The presentation layer in your code provides the user experience. Etiket, değerler, onay kutuları ve sayı gibi çok yönlü gezintinin bileşen parçalarını listelemelidir.It should list the constituent parts of the faceted navigation, such as the label, values, check boxes, and the count. Azure Bilişsel Arama REST API platform belirsiz olduğundan istediğiniz dili ve platformu kullanın.The Azure Cognitive Search REST API is platform agnostic, so use whatever language and platform you want. Önemli şey, her ek model seçildiği için, güncelleştirilmiş Kullanıcı arabirimi durumu ile artımlı yenilemeyi destekleyen kullanıcı arabirimi öğelerini dahil etmek için kullanılır.The important thing is to include UI elements that support incremental refresh, with updated UI state as each additional facet is selected.

Sorgu zamanında, uygulama kodunuz, alanı tarafından modeli sağlayan bir istek parametresi olan facet=[string]içeren bir istek oluşturur.At query time, your application code creates a request that includes facet=[string], a request parameter that provides the field to facet by. Bir sorgu, her biri bir ve işareti (&) karakteriyle ayrılan &facet=color&facet=category&facet=ratinggibi birden çok model içerebilir.A query can have multiple facets, such as &facet=color&facet=category&facet=rating, each one separated by an ampersand (&) character.

Uygulama kodu Ayrıca, çok yönlü gezinmede tıklama olaylarını işlemek için bir $filter ifadesi de oluşturmanız gerekir.Application code must also construct a $filter expression to handle the click events in faceted navigation. $filter, model değerini filtre ölçütü olarak kullanarak arama sonuçlarını azaltır.A $filter reduces the search results, using the facet value as filter criteria.

Azure Bilişsel Arama, girdiğiniz bir veya daha fazla terim temelinde, çok yönlü gezinti yapısına yönelik güncelleştirmelerle birlikte arama sonuçlarını döndürür.Azure Cognitive Search returns the search results, based on one or more terms that you enter, along with updates to the faceted navigation structure. Azure Bilişsel Arama 'de, çok yönlü gezinme, model değerleri olan tek düzeyli bir yapım ve her biri için kaç sonuç bulunduğunu sayar.In Azure Cognitive Search, faceted navigation is a single-level construction, with facet values, and counts of how many results are found for each one.

Aşağıdaki bölümlerde, her bir parçayı nasıl derlemenize daha yakından bakacağız.In the following sections, we take a closer look at how to build each part.

Dizini oluşturmaBuild the index

Bu dizin özniteliği aracılığıyla, dizinde alan temelinde, dizin içinde bir alan temelinde etkin olur: "Facetable": true.Faceting is enabled on a field-by-field basis in the index, via this index attribute: "Facetable": true.
Büyük olasılıkla çok yönlü gezintide kullanılabilecek tüm alan türleri varsayılan olarak Facetable.All field types that could possibly be used in faceted navigation are Facetable by default. Bu tür alan türleri Edm.String, Edm.DateTimeOffsetve tüm sayısal alan türlerini içerir (temel olarak, tüm alan türleri, çok yönlü bir gezinmede kullanılamayan Edm.GeographyPointdışında çok yönlü tablolardır).Such field types include Edm.String, Edm.DateTimeOffset, and all the numeric field types (essentially, all field types are facetable except Edm.GeographyPoint, which can’t be used in faceted navigation).

Bir dizin oluştururken, çok yönlü gezinme için en iyi uygulama bir model olarak asla kullanılmamalıdır.When building an index, a best practice for faceted navigation is to explicitly turn faceting off for fields that should never be used as a facet. Özellikle, bir KIMLIK veya ürün adı gibi tek değerler için dize alanları, yanlışlıkla (ve verimsiz) çok yönlü gezintide kullanımı engellemek için "Facetable": false olarak ayarlanmalıdır.In particular, string fields for singleton values, such as an ID or product name, should be set to "Facetable": false to prevent their accidental (and ineffective) use in faceted navigation. İhtiyacınız olmayan yere her ne kadar iyi hale getirmeniz, Dizin boyutunun küçük kalmasını sağlar ve genellikle performansı geliştirir.Turning faceting off where you don’t need it helps keep the size of the index small, and typically improves performance.

Aşağıda, Iş portalı Demo örnek uygulaması şemasının bir parçası verilmiştir ve bu boyut, boyutu azaltmak için bazı özniteliklerin kırpılmakta:Following is part of the schema for the Job Portal Demo sample app, trimmed of some attributes to reduce the size:

{
  ...
  "name": "nycjobs",
  "fields": [
    { "name": "id",                 "type": "Edm.String",              "searchable": false, "filterable": false, ... "facetable": false, ... },
    { "name": "job_id",             "type": "Edm.String",              "searchable": false, "filterable": false, ... "facetable": false, ... },
    { "name": "agency",              "type": "Edm.String",             "searchable": true,  "filterable": true, ...  "facetable": true, ...  },
    { "name": "posting_type",        "type": "Edm.String",             "searchable": true,  "filterable": true, ...  "facetable": true, ...  },
    { "name": "num_of_positions",    "type": "Edm.Int32",              "searchable": false, "filterable": true, ...  "facetable": true, ...  },
    { "name": "business_title",      "type": "Edm.String",             "searchable": true,  "filterable": true, ...  "facetable": true, ...  },
    { "name": "civil_service_title", "type": "Edm.String",             "searchable": true,  "filterable": true, ...  "facetable": true, ...  },
    { "name": "title_code_no",       "type": "Edm.String",             "searchable": true,  "filterable": true, ...  "facetable": true, ...  },
    { "name": "level",               "type": "Edm.String",             "searchable": true,  "filterable": true, ...  "facetable": true, ...  },
    { "name": "salary_range_from",   "type": "Edm.Int32",              "searchable": false, "filterable": true, ...  "facetable": true, ...  },
    { "name": "salary_range_to",     "type": "Edm.Int32",              "searchable": false, "filterable": true, ...  "facetable": true, ...  },
    { "name": "salary_frequency",    "type": "Edm.String",             "searchable": true,  "filterable": true, ...  "facetable": true, ...  },
    { "name": "work_location",       "type": "Edm.String",             "searchable": true,  "filterable": true, ...  "facetable": true, ...  },
…
    { "name": "geo_location",        "type": "Edm.GeographyPoint",     "searchable": false, "filterable": true, ...  "facetable": false, ... },
    { "name": "tags",                "type": "Collection(Edm.String)", "searchable": true,  "filterable": true, ...  "facetable": true, ...  }
  ],
…
}

Örnek şemada gördüğünüz gibi, KIMLIK değerleri gibi model olarak kullanılmaması gereken dize alanları için Facetable kapalıdır.As you can see in the sample schema, Facetable is turned off for string fields that shouldn’t be used as facets, such as ID values. İhtiyacınız olmayan yere her ne kadar iyi hale getirmeniz, Dizin boyutunun küçük kalmasını sağlar ve genellikle performansı geliştirir.Turning faceting off where you don’t need it helps keep the size of the index small, and typically improves performance.

İpucu

En iyi uygulama olarak, her alan için dizin özniteliklerinin tam kümesini ekleyin.As a best practice, include the full set of index attributes for each field. Facetable, neredeyse tüm alanlar için varsayılan olarak açık olsa da, her bir özniteliği özellikle ayarlamak her bir şema kararının etkilerini düşünmenize yardımcı olabilir.Although Facetable is on by default for almost all fields, purposely setting each attribute can help you think through the implications of each schema decision.

Verileri denetleyinCheck the data

Verilerinizin kalitesi, çok yönlü gezinti yapısının, onu bekledikleri gibi çalışıp çalışmadığını doğrudan etkiler.The quality of your data has a direct effect on whether the faceted navigation structure materializes as you expect it to. Ayrıca, sonuç kümesini azaltmak için filtre oluşturma kolaylığını da etkiler.It also affects the ease of constructing filters to reduce the result set.

Marka veya fiyata göre isterseniz, her belge, geçerli, tutarlı ve bir filtre seçeneği olarak üretken olan BrandName ve ProductPrice için değerler içermelidir.If you want to facet by Brand or Price, each document should contain values for BrandName and ProductPrice that are valid, consistent, and productive as a filter option.

Aşağıda, temizleme için bazı anımsatıcılar verilmiştir:Here are a few reminders of what to scrub for:

  • Kendisine göre istediğiniz her alan için kendi kendine yönlendirilmiş aramada filtre olarak uygun olan değerleri içerip içermediğini kendinize sorun.For every field that you want to facet by, ask yourself whether it contains values that are suitable as filters in self-directed search. Rekabet seçenekleri arasında açık bir seçim sunmak için değerler kısa, açıklayıcı ve yeterince ayırt edilmelidir.The values should be short, descriptive, and sufficiently distinctive to offer a clear choice between competing options.
  • Hatalı yazımları veya neredeyse eşleşen değerler.Misspellings or nearly matching values. Renk üzerinde bir değer belirtirseniz ve alan değerleri turuncu ve süslü (yanlış yazım) içeriyorsa, renk alanı temel alan bir model her ikisini de seçer.If you facet on Color, and field values include Orange and Ornage (a misspelling), a facet based on the Color field would pick up both.
  • Büyük küçük harf metin Ayrıca, turuncu ve turuncu ile iki farklı değer olarak görünmüş şekilde, çok yönlü gezinmede de wreak düzensizliğe olabilir.Mixed case text can also wreak havoc in faceted navigation, with orange and Orange appearing as two different values.
  • Aynı değerin tek ve çoğul sürümleri, her biri için ayrı bir modelin oluşmasına neden olabilir.Single and plural versions of the same value can result in a separate facet for each.

Imagine de, verileri hazırlarken, etkin çok yönlü gezintinin önemli bir yönüdür.As you can imagine, diligence in preparing the data is an essential aspect of effective faceted navigation.

Kullanıcı Arabirimini oluşturmaBuild the UI

Sunu katmanından geri döndüğünüzde, aksi takdirde kaçırılmış olan gereksinimleri ortaya çıkarabilir ve arama deneyimine yönelik hangi yeteneklerin gerekli olduğunu anlayabilirsiniz.Working back from the presentation layer can help you uncover requirements that might be missed otherwise, and understand which capabilities are essential to the search experience.

Çok yönlü gezinme bakımından Web veya uygulama sayfanız, çok yönlü gezinme yapısını görüntüler, sayfada Kullanıcı girişini algılar ve değiştirilen öğeleri ekler.In terms of faceted navigation, your web or application page displays the faceted navigation structure, detects user input on the page, and inserts the changed elements.

Web uygulamaları için, AJAX genellikle sunu katmanında kullanılır, çünkü artımlı değişiklikleri yenileyebilirler.For web applications, AJAX is commonly used in the presentation layer because it allows you to refresh incremental changes. Ayrıca, HTTP üzerinden Azure Bilişsel Arama hizmetine bağlanabilecek ASP.NET MVC veya başka bir görselleştirme platformunu da kullanabilirsiniz.You could also use ASP.NET MVC or any other visualization platform that can connect to an Azure Cognitive Search service over HTTP. Bu makale boyunca başvurulan örnek uygulama-- Azure bilişsel arama Iş portalı tanıtımı – BIR ASP.NET MVC uygulaması olarak gerçekleşir.The sample application referenced throughout this article -- the Azure Cognitive Search Job Portal Demo – happens to be an ASP.NET MVC application.

Örnekte, çok yönlü gezinme, arama sonuçları sayfasında yerleşiktir.In the sample, faceted navigation is built into the search results page. Örnek uygulamanın index.cshtml dosyasından alınan aşağıdaki örnek, arama sonuçları sayfasında çok yönlü gezintiyi görüntülemek için statik HTML yapısını gösterir.The following example, taken from the index.cshtml file of the sample application, shows the static HTML structure for displaying faceted navigation on the search results page. Model listesi, bir arama terimi gönderdiğinizde veya bir modeli seçtiğinizde veya temizlediğinizde dinamik olarak oluşturulur veya yeniden oluşturulur.The list of facets is built or rebuilt dynamically when you submit a search term, or select or clear a facet.

<div class="widget sidebar-widget jobs-filter-widget">
  <h5 class="widget-title">Filter Results</h5>
    <p id="filterReset"></p>
    <div class="widget-content">

      <h6 id="businessTitleFacetTitle">Business Title</h6>
      <ul class="filter-list" id="business_title_facets">
      </ul>

      <h6>Location</h6>
      <ul class="filter-list" id="posting_type_facets">
      </ul>

      <h6>Posting Type</h6>
      <ul class="filter-list" id="posting_type_facets"></ul>

      <h6>Minimum Salary</h6>
      <ul class="filter-list" id="salary_range_facets">
      </ul>

  </div>
</div>

index.cshtml sayfasından aşağıdaki kod parçacığı, ilk modeli, Iş başlığını göstermek için HTML 'i dinamik olarak oluşturur.The following code snippet from the index.cshtml page dynamically builds the HTML to display the first facet, Business Title. Benzer işlevler, diğer modeller için HTML 'i dinamik olarak oluşturur.Similar functions dynamically build the HTML for the other facets. Her modelin bir etiketi ve bir sayı vardır ve bu da bu model sonucu için bulunan öğelerin sayısını görüntüler.Each facet has a label and a count, which displays the number of items found for that facet result.

function UpdateBusinessTitleFacets(data) {
  var facetResultsHTML = '';
  for (var i = 0; i < data.length; i++) {
    facetResultsHTML += '<li><a href="javascript:void(0)" onclick="ChooseBusinessTitleFacet(\'' + data[i].Value + '\');">' + data[i].Value + ' (' + data[i].Count + ')</span></a></li>';
  }

  $("#business_title_facets").html(facetResultsHTML);
}

İpucu

Arama sonuçları sayfasını tasarlarken, kısıtlamaları temizlemek için bir mekanizma eklemeyi unutmayın.When you design the search results page, remember to add a mechanism for clearing facets. Onay kutuları eklerseniz, filtrelerin nasıl temizleyeceğini kolayca görebilirsiniz.If you add check boxes, you can easily see how to clear the filters. Diğer düzenler için bir içerik haritası deseninin veya başka bir yaratıcı yaklaşımın olması gerekebilir.For other layouts, you might need a breadcrumb pattern or another creative approach. Örneğin, Iş arama portalı örnek uygulamasında, modeli temizlemek için seçili bir modelin ardından [X] tıklayabilirsiniz.For example, in the Job Search Portal sample application, you can click the [X] after a selected facet to clear the facet.

Sorguyu oluşturmaBuild the query

Sorgu oluşturmak için yazdığınız kod, arama ifadeleri, modeller, filtreler, Puanlama profilleri gibi geçerli bir sorgunun tüm parçalarını ve bir isteği formülleştirmek için kullanılan her şeyi belirtmelidir.The code that you write for building queries should specify all parts of a valid query, including search expressions, facets, filters, scoring profiles– anything used to formulate a request. Bu bölümde, modellerin bir sorguya hangi noktada uyduğunu ve daha düşük bir sonuç kümesi sunma ile filtrelerin nasıl kullanıldığını araştırıyoruz.In this section, we explore where facets fit into a query, and how filters are used with facets to deliver a reduced result set.

Bu örnek uygulamada modellerin integral olduğuna dikkat edin.Notice that facets are integral in this sample application. Iş portalı tanıtımında arama deneyimi, çok yönlü gezinme ve filtreler etrafında tasarlanmıştır.The search experience in the Job Portal Demo is designed around faceted navigation and filters. Sayfada çok yönlü gezintinin belirgin yerleşimi, önemli olduğunu gösterir.The prominent placement of faceted navigation on the page demonstrates its importance.

Bir örnek genellikle başlamak için iyi bir yerdir.An example is often a good place to begin. JobsSearch.cs dosyasından alınan aşağıdaki örnek, Iş başlığına, konuma, nakil türüne ve en düşük ücret temelinde model gezintisi oluşturan bir istek oluşturur.The following example, taken from the JobsSearch.cs file, builds a request that creates facet navigation based on Business Title, Location, Posting Type, and Minimum Salary.

SearchParameters sp = new SearchParameters()
{
  ...
  // Add facets
  Facets = new List<String>() { "business_title", "posting_type", "level", "salary_range_from,interval:50000" },
};

Bir model sorgu parametresi bir alana ayarlanır ve veri türüne bağlı olarak, count:<integer>, sort:<>, interval:<integer>ve values:<list>içeren virgülle ayrılmış liste ile daha fazla parametreli olabilir.A facet query parameter is set to a field and depending on the data type, can be further parameterized by comma-delimited list that includes count:<integer>, sort:<>, interval:<integer>, and values:<list>. Aralıklar ayarlanırken sayısal veriler için bir değerler listesi desteklenir.A values list is supported for numeric data when setting up ranges. Kullanım ayrıntıları için bkz. arama belgeleri (Azure BILIŞSEL arama API) .See Search Documents (Azure Cognitive Search API) for usage details.

Modellerle birlikte, uygulamanız tarafından formül oluşturan istek, bir model değer seçimine dayalı olarak aday belgeler kümesini daraltmak için de filtreler derlemelidir.Along with facets, the request formulated by your application should also build filters to narrow down the set of candidate documents based on a facet value selection. Bir Bisiklet Mağazası için, çok yönlü gezinme hangi renkler, üreticiler ve bisiklet türlerinin kullanılabildiğigibi sorulara ipuçları sağlar.For a bike store, faceted navigation provides clues to questions like What colors, manufacturers, and types of bikes are available?. Filtreleme, Bu fiyat aralığında tam Bisikletler kırmızı, Sıradağlar bisikletlerigibi sorulara yanıt veriyor mu?Filtering answers questions like Which exact bikes are red, mountain bikes, in this price range?. Yalnızca kırmızı ürünlerin gösterilmesi gerektiğini belirtmek için "kırmızı" tıkladığınızda, uygulamanın gönderdiği sonraki sorgu $filter=Color eq ‘Red’içerir.When you click "Red" to indicate that only Red products should be shown, the next query the application sends includes $filter=Color eq ‘Red’.

JobsSearch.cs sayfasından aşağıdaki kod parçacığı, Iş başlığı modeli 'nden bir değer seçerseniz, seçili Iş başlığını filtreye ekler.The following code snippet from the JobsSearch.cs page adds the selected Business Title to the filter if you select a value from the Business Title facet.

if (businessTitleFacet != "")
  filter = "business_title eq '" + businessTitleFacet + "'";

İpuçları ve en iyi yöntemlerTips and best practices

Dizin oluşturma ipuçlarıIndexing tips

Arama kutusu kullanmıyorsanız Dizin verimliliğini iyileştirmeImprove index efficiency if you don't use a Search box

Uygulamanız özel olarak çok yönlü gezinme kullanıyorsa (yani arama kutusu yoksa), daha küçük bir dizin oluşturmak için facetable=true alanı searchable=falseolarak işaretleyebilirsiniz.If your application uses faceted navigation exclusively (that is, no search box), you can mark the field as searchable=false, facetable=true to produce a more compact index. Ayrıca, dizin oluşturma işlemi yalnızca tüm model değerlerinde gerçekleşir, çok sözcüklü bir değerin bileşen bölümlerinin hiçbir kelime kesmesi veya dizinlemesi yoktur.In addition, indexing occurs only on whole facet values, with no word-break or indexing of the component parts of a multi-word value.

Hangi alanların model olarak kullanılabileceğini belirtinSpecify which fields can be used as facets

Dizin şemasının, bir model olarak kullanılabilecek alanları belirlediğini unutmayın.Recall that the schema of the index determines which fields are available to use as a facet. Bir alanın çok yönlü olduğunu varsayarsak, sorgu hangi alanların model olarak olduğunu belirtir.Assuming a field is facetable, the query specifies which fields to facet by. Seçtiğiniz alan, etiketin altında görünen değerleri sağlar.The field by which you are faceting provides the values that appear below the label.

Her etiket altında görünen değerler dizinden alınır.The values that appear under each label are retrieved from the index. Örneğin, model alanı renkise, ek filtreleme için kullanılabilen değerler bu alanın kırmızı, siyah ve benzeri değerleri olur.For example, if the facet field is Color, the values available for additional filtering are the values for that field - Red, Black, and so forth.

Yalnızca sayısal ve tarih saat değerleri için model alanında (örneğin, facet=Rating,values:1|2|3|4|5) değerleri açık bir şekilde ayarlayabilirsiniz.For Numeric and DateTime values only, you can explicitly set values on the facet field (for example, facet=Rating,values:1|2|3|4|5). Bu alan türleri için değer listesine izin verilir. model sonuçlarının bitişik aralıklar halinde ayrılmasını basitleştirir (sayısal değerlere veya zaman dönemlerine göre aralıklar).A values list is allowed for these field types to simplify the separation of facet results into contiguous ranges (either ranges based on numeric values or time periods).

Varsayılan olarak, çok yönlü bir gezinmede yalnızca bir düzeyinize sahip olabilirsinizBy default you can only have one level of faceted navigation

Belirtildiği gibi, bir hiyerarşide iç içe geçme modellerini doğrudan desteklemez.As noted, there is no direct support for nesting facets in a hierarchy. Varsayılan olarak, Azure Bilişsel Arama 'da çok yönlü gezinme yalnızca tek bir filtre düzeyini destekler.By default, faceted navigation in Azure Cognitive Search only supports one level of filters. Ancak geçici çözümler mevcuttur.However, workarounds do exist. Hiyerarşi başına bir giriş noktasıyla Collection(Edm.String) hiyerarşik bir model yapısını kodlayabilirsiniz.You can encode a hierarchical facet structure in a Collection(Edm.String) with one entry point per hierarchy. Bu geçici çözümün uygulanması, bu makalenin kapsamı dışındadır.Implementing this workaround is beyond the scope of this article.

İpuçları sorgulanıyorQuerying tips

Alanları doğrulaValidate fields

, Güvenilir olmayan kullanıcı girişine göre model listesini dinamik olarak oluşturursanız, çok yönlü alanların adlarının geçerli olduğunu doğrulayın.If you build the list of facets dynamically based on untrusted user input, validate that the names of the faceted fields are valid. Ya da, .NET 'teki Uri.EscapeDataString() veya tercih ettiğiniz platformunuzun eşdeğerini kullanarak URL 'Ler oluştururken adları kaçış.Or, escape the names when building URLs by using either Uri.EscapeDataString() in .NET, or the equivalent in your platform of choice.

Filtreleme ipuçlarıFiltering tips

Filtre ile arama hassasiyetini artırIncrease search precision with filters

Filtreleri kullanın.Use filters. Yalnızca arama ifadelerini tek başına kullanıyorsanız, sözcük kökü ayırmayı kapsayan bir belgenin, alanlarının hiçbirinde kesin model değeri olmayan döndürülmesine neden olabilir.If you rely on just search expressions alone, stemming could cause a document to be returned that doesn’t have the precise facet value in any of its fields.

Filtrelerle arama performansını artırmaIncrease search performance with filters

Arama için aday belgeler kümesini daraltmak ve bunları derecelendirmeden hariç tutmak için filtreler.Filters narrow down the set of candidate documents for search and exclude them from ranking. Büyük bir belge kümesine sahipseniz, seçmeli bir model detaya gitme genellikle daha iyi performans sağlar.If you have a large set of documents, using a selective facet drill-down often gives you better performance.

Yalnızca çok yönlü alanları filtreleFilter only the faceted fields

Çok yönlü detaya gitme bölümünde, genellikle, tüm aranabilir alanlarda değil, model değeri yalnızca belirli (çok yönlü) bir alanda olan belgeleri dahil etmek istersiniz.In faceted drill-down, you typically want to only include documents that have the facet value in a specific (faceted) field, not anywhere across all searchable fields. Filtre eklemek, hizmeti yalnızca, eşleşen bir değer için çok yönlü alanda arama yapmak üzere yönlendirerek hedef alanı zorlar.Adding a filter reinforces the target field by directing the service to search only in the faceted field for a matching value.

Model sonuçlarını daha fazla filtreye göre KırpTrim facet results with more filters

Model sonuçları, bir model terimiyle eşleşen arama sonuçlarında bulunan belgelerdir.Facet results are documents found in the search results that match a facet term. Aşağıdaki örnekte, bulut bilgi işlemiçin arama sonuçlarında, 254 öğe de bir içerik türü olarak iç belirtime sahiptir.In the following example, in search results for cloud computing, 254 items also have internal specification as a content type. Öğelerin birbirini karşılıklı olarak dışlamalı olması gerekmez.Items are not necessarily mutually exclusive. Bir öğe her iki filtrenin ölçütlerine uyuyorsa, her birinde sayılır.If an item meets the criteria of both filters, it is counted in each one. Bu çoğaltma, genellikle belge etiketlemesini uygulamak için kullanılan Collection(Edm.String) alanları üzerinde bir değer oluşturduğunuzda mümkündür.This duplication is possible when faceting on Collection(Edm.String) fields, which are often used to implement document tagging.

    Search term: "cloud computing"
    Content type
       Internal specification (254)
       Video (10) 

Genel olarak, model sonuçlarının sürekli olarak çok büyük olduğunu fark ederseniz, kullanıcılara aramayı daraltmak için daha fazla seçenek sağlamak üzere daha fazla filtre eklemenizi öneririz.In general, if you find that facet results are consistently too large, we recommend that you add more filters to give users more options for narrowing the search.

Sonuç sayısı hakkında ipuçlarıTips about result count

Model gezinmede öğelerin sayısını sınırlayınLimit the number of items in the facet navigation

Gezinti ağacındaki her bir çok yönlü alan için varsayılan sınır olan 10 değer vardır.For each faceted field in the navigation tree, there is a default limit of 10 values. Bu varsayılan, değer listesini yönetilebilir bir boyuta tutacağından, gezinme yapıları için anlamlı hale gelir.This default makes sense for navigation structures because it keeps the values list to a manageable size. Sayılacak bir değer atayarak varsayılanı geçersiz kılabilirsiniz.You can override the default by assigning a value to count.

  • &facet=city,count:5, en üstteki derecelendirilen sonuçlarda bulunan ilk beş şehrin bir model sonucu olarak döndürülmeyeceğini belirtir.&facet=city,count:5 specifies that only the first five cities found in the top ranked results are returned as a facet result. "Havaalanı" ve 32 eşleşme arama terimi ile örnek bir sorgu düşünün.Consider a sample query with a search term of “airport” and 32 matches. Sorgu &facet=city,count:5belirtiyorsa, yalnızca arama sonuçlarında en çok belgeyi içeren ilk beş benzersiz şehir, model sonuçlarına dahil edilir.If the query specifies &facet=city,count:5, only the first five unique cities with the most documents in the search results are included in the facet results.

Model sonuçları ve arama sonuçları arasındaki ayrımı fark edin.Notice the distinction between facet results and search results. Arama sonuçları sorguyla eşleşen tüm belgelerdir.Search results are all the documents that match the query. Model sonuçları her bir model değeri için eşleşmeler olur.Facet results are the matches for each facet value. Örnekte, arama sonuçları, model sınıflandırma listesinde olmayan şehir adlarını içerir (örneğimizde 5).In the example, search results include City names that are not in the facet classification list (5 in our example). Çok yönlü gezinmede filtrelenmiş sonuçlar, modelleri temizlediğinizde veya City 'in yanı sıra diğer modelleri seçerken görünür hale gelir.Results that are filtered out through faceted navigation become visible when you clear facets, or choose other facets besides City.

Not

Birden çok tür kafa karıştırıcı olduğunda count ele alınabilir.Discussing count when there is more than one type can be confusing. Aşağıdaki tabloda, terimin Azure Bilişsel Arama API 'SI, örnek kod ve belgelerde nasıl kullanıldığı hakkında kısa bir Özet sunulmaktadır.The following table offers a brief summary of how the term is used in Azure Cognitive Search API, sample code, and documentation.

  • @colorFacet.count
    Sunum kodunda, model sonuç sayısını görüntülemek için kullanılan model üzerinde bir count parametresi görmeniz gerekir.In presentation code, you should see a count parameter on the facet, used to display the number of facet results. Model sonuçlarında, sayı, model terimi veya aralığında eşleşen belge sayısını gösterir.In facet results, count indicates the number of documents that match on the facet term or range.
  • &facet=City,count:12
    Bir model sorgusunda, sayı değerini bir değere ayarlayabilirsiniz.In a facet query, you can set count to a value. Varsayılan değer 10 ' dur, ancak daha yüksek veya daha düşük bir değer belirleyebilirsiniz.The default is 10, but you can set it higher or lower. count:12 ayarlamak, model sonuçlarında ilk 12 eşleşme belge sayısına göre alır.Setting count:12 gets the top 12 matches in facet results by document count.
  • "@odata.count""@odata.count"
    Sorgu yanıtında, bu değer arama sonuçlarında eşleşen öğe sayısını gösterir.In the query response, this value indicates the number of matching items in the search results. Ortalama olarak, arama terimiyle eşleşen öğelerin varlığı nedeniyle tüm model sonuçlarının toplamı, ancak hiçbir model değeri eşleştirilmez.On average, it’s larger than the sum of all facet results combined, due to the presence of items that match the search term, but have no facet value matches.

Model sonuçlarında sayıları alGet counts in facet results

Çok yönlü bir sorguya filtre eklediğinizde, model ekstresini (örneğin, facet=Rating&$filter=Rating ge 4) sürdürmek isteyebilirsiniz.When you add a filter to a faceted query, you might want to retain the facet statement (for example, facet=Rating&$filter=Rating ge 4). Teknik olarak, model = derecelendirme gerekmez, ancak bu derecelendirme 4 ve üzeri için model değerleri sayısını döndürür.Technically, facet=Rating isn’t needed, but keeping it returns the counts of facet values for ratings 4 and higher. Örneğin, "4" e tıklarsanız ve sorgu "4" daha büyük veya buna eşit bir filtre içeriyorsa, 4 ve üzeri her bir derecelendirme için sayımlar döndürülür.For example, if you click "4" and the query includes a filter for greater or equal to "4", counts are returned for each rating that is 4 and higher.

Doğru model sayımlarını aldığınızdan emin olunMake sure you get accurate facet counts

Belirli koşullarda, model sayılarının sonuç kümeleriyle eşleşip eşleşmediği fark edebilirsiniz (bkz. Azure bilişsel arama (Forum gönderisi)).Under certain circumstances, you might find that facet counts do not match the result sets (see Faceted navigation in Azure Cognitive Search (forum post)).

Parçalı mimari nedeniyle model sayısı yanlış olabilir.Facet counts can be inaccurate due to the sharding architecture. Her arama dizininin birden çok parçaları vardır ve her parça, ilk N modellerini belge sayısına göre rapor ederek tek bir sonuçla birleştirilir.Every search index has multiple shards, and each shard reports the top N facets by document count, which is then combined into a single result. Bazı parçalar daha fazla eşleşen değere sahip olsa da, diğerleri daha az olduğunda bazı model değerlerinin eksik veya eksik olduğunu fark edebilirsiniz.If some shards have many matching values, while others have fewer, you may find that some facet values are missing or under-counted in the results.

Bu davranış herhangi bir zamanda değişebilir, ancak bugün bu davranışla karşılaşırsanız, her bir parçadan tam raporlamayı zorlamak için sayıyı<> büyük bir sayıya flaşarak geçici bir çözüm bulabilirsiniz.Although this behavior could change at any time, if you encounter this behavior today, you can work around it by artificially inflating the count:<number> to a large number to enforce full reporting from each shard. Count değeri, alanındaki benzersiz değer sayısından büyükse veya buna eşitse, doğru sonuçlar garanti edilir.If the value of count: is greater than or equal to the number of unique values in the field, you are guaranteed accurate results. Ancak, belge sayıları yüksek olduğunda bir performans cezası vardır, bu nedenle bu bozacağından seçeneğini kullanın.However, when document counts are high, there is a performance penalty, so use this option judiciously.

Kullanıcı arabirimi ipuçlarıUser interface tips

Model gezintisinde her bir alan için etiketler eklemeAdd labels for each field in facet navigation

Etiketler genellikle HTML veya formda tanımlanır (örnek uygulamadaindex.cshtml).Labels are typically defined in the HTML or form (index.cshtml in the sample application). Azure Bilişsel Arama model gezinti etiketleri veya diğer meta veriler için bir API yok.There is no API in Azure Cognitive Search for facet navigation labels or any other metadata.

Aralığa göre filtreleFilter based on a range

Değer aralıkları üzerinde her zaman, ortak bir arama uygulaması gereksinimidir.Faceting over ranges of values is a common search application requirement. Aralıklar sayısal veriler ve tarih saat değerleri için desteklenir.Ranges are supported for numeric data and DateTime values. Arama belgelerindeki her yaklaşım hakkında daha fazla bilgi edinebilirsiniz (Azure BILIŞSEL arama API).You can read more about each approach in Search Documents (Azure Cognitive Search API).

Azure Bilişsel Arama, bir Aralık hesaplama için iki yaklaşım sunarak Aralık oluşturmayı basitleştirir.Azure Cognitive Search simplifies range construction by providing two approaches for computing a range. Her iki yaklaşım için de Azure Bilişsel Arama sağladığınız girişler verilen uygun aralıkları oluşturur.For both approaches, Azure Cognitive Search creates the appropriate ranges given the inputs you’ve provided. Örneğin, 10 | 20 | 30 Aralık değerlerini belirtirseniz, otomatik olarak 0-10, 10-20, 20-30 aralıklarını oluşturur.For instance, if you specify range values of 10|20|30, it automatically creates ranges of 0-10, 10-20, 20-30. Uygulamanız, isteğe bağlı olarak boş olan aralıkları kaldırabilir.Your application can optionally remove any intervals that are empty.

Yaklaşım 1: Aralık parametresini kullanmaApproach 1: Use the interval parameter
Fiyat modellerini $10 artışlarla ayarlamak için şunları belirtmeniz gerekir: &facet=price,interval:10To set price facets in $10 increments, you would specify: &facet=price,interval:10

Yaklaşım 2: bir değerler listesi kullanmaApproach 2: Use a values list
Sayısal veriler için bir values listesi kullanabilirsiniz.For numeric data, you can use a values list. Aşağıdaki şekilde işlenen listPrice alanı için model aralığını göz önünde bulundurun:Consider the facet range for a listPrice field, rendered as follows:

Örnek değerler listesiSample values list

Önceki ekran görüntüsündeki gibi bir model aralığı belirtmek için bir değerler listesi kullanın:To specify a facet range like the one in the preceding screenshot, use a values list:

facet=listPrice,values:10|25|100|500|1000|2500

Her Aralık, başlangıç noktası olarak 0, listeden bir bitiş noktası olarak bir değer ve daha sonra ayrı aralıklar oluşturmak için önceki aralığın kırpılandır.Each range is built using 0 as a starting point, a value from the list as an endpoint, and then trimmed of the previous range to create discrete intervals. Azure Bilişsel Arama, bu şeyleri çok yönlü gezintinin bir parçası olarak yapar.Azure Cognitive Search does these things as part of faceted navigation. Her aralığı yapılandırmak için kod yazmanız gerekmez.You do not have to write code for structuring each interval.

Aralık için filtre oluşturmaBuild a filter for a range

Belgelerinizi seçtiğiniz bir aralığa göre filtrelemek için, "ge" ve "lt" filtre işleçlerini aralığın uç noktalarını tanımlayan iki bölümlü bir ifadede kullanabilirsiniz.To filter documents based on a range you select, you can use the "ge" and "lt" filter operators in a two-part expression that defines the endpoints of the range. Örneğin, bir listPrice alanı için 10-25 aralığını seçerseniz, filtre $filter=listPrice ge 10 and listPrice lt 25olur.For example, if you choose the range 10-25 for a listPrice field, the filter would be $filter=listPrice ge 10 and listPrice lt 25. Örnek kodda, filtre ifadesi bitiş noktalarını ayarlamak için pricefrom ve priceto parametrelerini kullanır.In the sample code, the filter expression uses priceFrom and priceTo parameters to set the endpoints.

Değer aralığı sorgusuQuery for a range of values

Mesafeden göre filtreleFilter based on distance

Geçerli konumunuza yakınlık temelinde bir mağaza, Restoran veya hedef seçmenize yardımcı olan filtreleri görmek yaygındır.It’s common to see filters that help you choose a store, restaurant, or destination based on its proximity to your current location. Bu tür bir filtre çok yönlü gezinme gibi görünebilir, ancak yalnızca bir filtredir.While this type of filter might look like faceted navigation, it’s just a filter. Özellikle söz konusu tasarım sorunu için uygulama önerisi arayan sizin için burada bahsettik.We mention it here for those of you who are specifically looking for implementation advice for that particular design problem.

Azure Bilişsel Arama, coğrafi. uzaklık ve coğrafi. kesişmeüzerinde iki Jeo-uzamsal işlev vardır.There are two Geospatial functions in Azure Cognitive Search, geo.distance and geo.intersects.

  • Coğrafi. Distance işlevi iki noktaya arasındaki mesafeyi kilometre cinsinden döndürür.The geo.distance function returns the distance in kilometers between two points. Bir nokta bir alandır ve diğeri, filtrenin bir parçası olarak geçirilen bir sabittir.One point is a field and other is a constant passed as part of the filter.
  • Coğrafi. kesişme işlevi, belirli bir çokgen belirli bir çokgen içindeyse true değerini döndürür.The geo.intersects function returns true if a given point is within a given polygon. Nokta bir alandır ve bu, filtrenin bir parçası olarak geçirilen koordinatların sabit listesi olarak belirtilir.The point is a field and the polygon is specified as a constant list of coordinates passed as part of the filter.

OData ifadesi sözdiziminde filtre örnekleri bulabilirsiniz (Azure bilişsel arama).You can find filter examples in OData expression syntax (Azure Cognitive Search).

Tanıtımı deneyinTry the demo

Azure Bilişsel Arama Iş portalı tanıtımı, bu makalede başvurulan örnekleri içerir.The Azure Cognitive Search Job Portal Demo contains the examples referenced in this article.

Arama sonuçlarıyla çalışırken, sorgu oluşturulmakta olan değişiklikler için URL 'YI izleyin.As you work with search results, watch the URL for changes in query construction. Bu uygulama, her birini seçerken URI 'ye model eklemek için yapılır.This application happens to append facets to the URI as you select each one.

  1. Tanıtım uygulamasının eşleme işlevini kullanmak için Bing Haritalar geliştirme merkezi' nden bir Bing Haritalar anahtarı alın.To use the mapping functionality of the demo app, get a Bing Maps key from the Bing Maps Dev Center. index.cshtml sayfasındaki mevcut anahtarın üzerine yapıştırın.Paste it over the existing key in the index.cshtml page. Web.config dosyasındaki BingApiKey ayarı kullanılmıyor.The BingApiKey setting in the Web.config file is not used.

  2. Uygulamayı çalıştırın.Run the application. İsteğe bağlı turu alın veya iletişim kutusunu kapatın.Take the optional tour, or dismiss the dialog box.

  3. "Analist" gibi bir arama terimi girin ve arama simgesine tıklayın.Enter a search term, such as "analyst", and click the Search icon. Sorgu hızlı bir şekilde yürütülür.The query executes quickly.

    Arama sonuçlarıyla çok yönlü bir gezinti yapısı da döndürülür.A faceted navigation structure is also returned with the search results. Arama sonucu sayfasında, çok yönlü gezinti yapısı her bir model sonucunun sayısını içerir.In the search result page, the faceted navigation structure includes counts for each facet result. Hiçbir model seçilmedi, bu nedenle tüm eşleşen sonuçlar döndürülür.No facets are selected, so all matching results are returned.

    Modelleri seçmeden önce arama sonuçlarıSearch results before selecting facets

  4. Bir Iş başlığına, konuma veya en düşük ücret ' e tıklayın.Click a Business Title, Location, or Minimum Salary. İlk aramada modeller null vardı, ancak değerler üzerinde çalıştıkları için arama sonuçları artık eşleşmeyen öğelerin kırpılmasından oluşur.Facets were null on the initial search, but as they take on values, the search results are trimmed of items that no longer match.

    Modelleri seçtikten sonra sonuçları araSearch results after selecting facets

  5. Farklı sorgu davranışlarını deneyebilmeniz için, çok yönlü sorguyu temizlemek üzere, modelleri temizlemek için seçili modellerle sonra [X] tıklatın.To clear the faceted query so that you can try different query behaviors, click the [X] after the selected facets to clear the facets.

Daha fazla bilgi edininLearn more

Azure bilişsel arama derinayrıntılarını izleyin.Watch Azure Cognitive Search Deep Dive. 45:25 ' de, nasıl model uygulanacağını gösteren bir tanıtım vardır.At 45:25, there is a demo on how to implement facets.

Çok yönlü gezinme için tasarım ilkeleri hakkında daha fazla bilgi için aşağıdaki bağlantıları öneririz:For more insights on design principles for faceted navigation, we recommend the following links: