Arama trafiği analizi için telemetri verileri toplama
Arama trafiği analizi, kullanıcı tarafından başlatılan tıklama olayları ve klavye girişleri gibi Azure Bilişsel Arama kullanıcı etkileşimleri hakkında telemetri verileri toplamak için bir desendir. Bu bilgileri kullanarak popüler arama terimleri, tıklama oranı ve hangi sorgu girişlerinin sıfır sonuç ortaya çıktısı olduğu dahil olmak üzere arama çözümlüğün ne kadar etkili olduğunu tespit edersiniz.
Bu düzen, kullanıcı verilerini toplamak için Application Analizler (Azure İzleyici özelliği)bağımlılığını alır. Bu makalede açıklandığı gibi istemci kodunuz için ölçüm eklemenizi gerektirir. Son olarak, verileri analiz etmek için bir raporlama mekanizmasına ihtiyacınız olacak. Uygulama Power BI öneririz, ancak Uygulama Panosu'nı veya Uygulama Panosu'Analizler.
Not
Bu makalede açıklanan desen, istemcinize eklemiş olduğunu kod tarafından oluşturulan gelişmiş senaryolar ve tıklama akışı verileri için kullanılır. Buna karşılık hizmet günlükleri kolayca ayarlanır, bir dizi ölçüm sağlar ve portalda koda gerek yoktur. Tüm senaryolar için günlük kaydının etkinleştirilmesi önerilir. Daha fazla bilgi için bkz. Günlük verilerini toplama ve analiz etme.
İlgili arama verilerini tanımlama
Arama trafiği analizi için yararlı ölçümlere sahip olmak için, arama uygulamanıza kullanıcılarından gelen bazı sinyallerin günlüğe kaydı gerekir. Bu sinyaller, kullanıcıların ilgilendiği ve ilgili olarak değerlendiren içerikleri işaret eder. Arama trafiği analizi için şunlar dahildir:
Kullanıcı tarafından oluşturulan arama olayları: Yalnızca bir kullanıcı tarafından başlatılan arama sorguları ilgi çekicidir. Facets doldurmak veya iç bilgileri almak için kullanılanlar gibi diğer arama istekleri önemli değildir. Sonuçlarınıza sapma veya sapmayı önlemek için yalnızca kullanıcı tarafından başlatılan olayları takip etmek için emin olun.
Kullanıcı tarafından oluşturulan tıklama olayları: Arama sonuçları sayfasında tıklama olayı genellikle bir belgenin belirli bir arama sorgusu için uygun bir sonuç olduğu anlamına gelir.
Arama ve tıklama olaylarını bağıntı kimliğiyle bağarak, uygulama arama işlevinin ne kadar iyi performans sergileyebli olduğunu daha iyi anlarsiniz.
Arama trafiği analizi ekleme
Azure Bilişsel Arama hizmetinizin portal sayfasında, bu telemetri desenini Trafik Analizi bilgi sayfasına erişmek için Arama sayfası'Trafik Analizi sayfasını açın. Bu sayfadan bir Application Analizler kaynağı seçerek veya oluşturabilir, ölçümlü araç anahtarını edinebilir, çözümünüz için uyarlayıp kod parçacıklarını kopyalayıp desene yansıyan şema üzerinde yerleşik bir Power BI raporu indirebilirsiniz.

1 - Uygulama Hedeflerini Analizler
Mevcut bir Application Analizler seçin veya yoksa bir tane oluşturun. Search Trafik Analizi sayfasını kullanırsanız, uygulamanın Application Analizler'a bağlanması için gereken araç Analizler.
Application Analizler kaynağınız olduktan sonra, desteklenen diller ve platformlar için yönergeleri izleyerek uygulamanızı kaydedebilirsiniz. Kayıt işlemi yalnızca Application Analizler'dan kodunuzla ilişkilendirmeyi ayar alan ölçüm anahtarını eklemektir. Anahtarı portalda veya var olan bir kaynağı Trafik Analizi Ara sayfasında bulabilirsiniz.
Bazı proje türleri için Visual Studio bir kısayol aşağıdaki adımlarda yansıtılacaktır. Bir kaynak oluşturur ve yalnızca birkaç tıklamayla uygulamanızı kaydettirer.
Geliştirme Visual Studio ASP.NET için çözümlerinizi açın ve Telemetri verilerine uygulama > Project'Analizler seçin.
Get Started düğmesine tıklayın.
Uygulama aboneliği, Azure Microsoft hesabı ve Application Analizler kaynağı sağlayarak (varsayılan olarak yeni bir kaynaktır) uygulamalarınızı kaydetme. Kaydet’e tıklayın.
Bu noktada, uygulama izleme için uygulama ayarlanır ve bu da tüm sayfa yüklemelerinin varsayılan ölçümlerle izli olduğu anlamına gelir. Önceki adımlar hakkında daha fazla bilgi için bkz. Sunucu tarafı telemetrisi Analizler Uygulama Etkinleştirme.
2 - Ölçüm ekleme
Bu adımda, yukarıdaki adımda oluşturduğunuz Application Analizler kullanarak kendi arama uygulamanızı takip edin. Telemetri istemcisi oluşturmakla başlayarak bu sürecin dört adımı vardır.
1. Adım: Telemetri istemcisi oluşturma
Application Analizler'a olayları gönderen bir Analizler. Sunucu tarafı uygulama kodunuz veya tarayıcıda çalışan istemci tarafı kodunuz için burada C# ve JavaScript çeşitlemeleri olarak ifade eden araçlar ekleyebilirsiniz (diğer diller için desteklenen platformların ve çerçevelerin tam listesine bakın). İstediğiniz bilgi derinliğini veren yaklaşımı seçin.
Sunucu tarafı telemetrisi, uygulama katmanında, örneğin bulutta web hizmeti olarak çalışan uygulamalarda veya şirket içi bir ağ üzerinde şirket içi uygulama olarak ölçümleri yakalar. Sunucu tarafı telemetrisi arama ve tıklama olaylarını, sonuçların belge konumunu ve sorgu bilgilerini yakalar, ancak veri koleksiyonunuz bu katmanda mevcut olan tüm bilgilerin kapsamına alır.
İstemcide, sorgu girişlerini yönlendiren, gezinti ekleyen veya bağlam içeren ek kodunuz olabilir (örneğin, giriş sayfasından başlatılan sorgular ve ürün sayfası). Çözümünüz bu şekilde açıklanmışsa telemetrinizin ek ayrıntıları yansıtması için istemci tarafı izlemesini tercih edebilirsiniz. Bu ek ayrıntıların nasıl toplanacakları bu düzenin kapsamının ötesine geçmektedir, ancak daha fazla Analizler web sayfaları için Uygulama Yönetimi'ne bakabilirsiniz.
C# kullanma
C# için InstrumentationKey, projeniz uygulama yapılandırmanıza uygunsa appsettings.json gibi ASP.NET. Anahtar konumu konusunda emin değilseniz kayıt yönergelerine geri bakın.
private static TelemetryClient _telemetryClient;
// Add a constructor that accepts a telemetry client:
public HomeController(TelemetryClient telemetry)
{
_telemetryClient = telemetry;
}
JavaScript kullanma
Geçerli Kod Parçacığı (aşağıda listelenmiştir) "5" sürümüdür, sürüm kod parçacığında sv:"#" olarak kodlanmıştır ve geçerli sürüm de GitHub.
<script type="text/javascript">
!function(T,l,y){var S=T.location,k="script",D="instrumentationKey",C="ingestionendpoint",I="disableExceptionTracking",E="ai.device.",b="toLowerCase",w="crossOrigin",N="POST",e="appInsightsSDK",t=y.name||"appInsights";(y.name||T[e])&&(T[e]=t);var n=T[t]||function(d){var g=!1,f=!1,m={initialize:!0,queue:[],sv:"5",version:2,config:d};function v(e,t){var n={},a="Browser";return n[E+"id"]=a[b](),n[E+"type"]=a,n["ai.operation.name"]=S&&S.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(m.sv||m.version),{time:function(){var e=new Date;function t(e){var t=""+e;return 1===t.length&&(t="0"+t),t}return e.getUTCFullYear()+"-"+t(1+e.getUTCMonth())+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+"."+((e.getUTCMilliseconds()/1e3).toFixed(3)+"").slice(2,5)+"Z"}(),iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:{baseData:{ver:2}}}}var h=d.url||y.src;if(h){function a(e){var t,n,a,i,r,o,s,c,u,p,l;g=!0,m.queue=[],f||(f=!0,t=h,s=function(){var e={},t=d.connectionString;if(t)for(var n=t.split(";"),a=0;a<n.length;a++){var i=n[a].split("=");2===i.length&&(e[i[0][b]()]=i[1])}if(!e[C]){var r=e.endpointsuffix,o=r?e.location:null;e[C]="https://"+(o?o+".":"")+"dc."+(r||"services.visualstudio.com")}return e}(),c=s[D]||d[D]||"",u=s[C],p=u?u+"/v2/track":d.endpointUrl,(l=[]).push((n="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",a=t,i=p,(o=(r=v(c,"Exception")).data).baseType="ExceptionData",o.baseData.exceptions=[{typeName:"SDKLoadFailed",message:n.replace(/\./g,"-"),hasFullStack:!1,stack:n+"\nSnippet failed to load ["+a+"] -- Telemetry is disabled\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\nHost: "+(S&&S.pathname||"_unknown_")+"\nEndpoint: "+i,parsedStack:[]}],r)),l.push(function(e,t,n,a){var i=v(c,"Message"),r=i.data;r.baseType="MessageData";var o=r.baseData;return o.message='AI (Internal): 99 message:"'+("SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) ("+n+")").replace(/\"/g,"")+'"',o.properties={endpoint:a},i}(0,0,t,p)),function(e,t){if(JSON){var n=T.fetch;if(n&&!y.useXhr)n(t,{method:N,body:JSON.stringify(e),mode:"cors"});else if(XMLHttpRequest){var a=new XMLHttpRequest;a.open(N,t),a.setRequestHeader("Content-type","application/json"),a.send(JSON.stringify(e))}}}(l,p))}function i(e,t){f||setTimeout(function(){!t&&m.core||a()},500)}var e=function(){var n=l.createElement(k);n.src=h;var e=y[w];return!e&&""!==e||"undefined"==n[w]||(n[w]=e),n.onload=i,n.onerror=a,n.onreadystatechange=function(e,t){"loaded"!==n.readyState&&"complete"!==n.readyState||i(0,t)},n}();y.ld<0?l.getElementsByTagName("head")[0].appendChild(e):setTimeout(function(){l.getElementsByTagName(k)[0].parentNode.appendChild(e)},y.ld||0)}try{m.cookie=l.cookie}catch(p){}function t(e){for(;e.length;)!function(t){m[t]=function(){var e=arguments;g||m.queue.push(function(){m[t].apply(m,e)})}}(e.pop())}var n="track",r="TrackPage",o="TrackEvent";t([n+"Event",n+"PageView",n+"Exception",n+"Trace",n+"DependencyData",n+"Metric",n+"PageViewPerformance","start"+r,"stop"+r,"start"+o,"stop"+o,"addTelemetryInitializer","setAuthenticatedUserContext","clearAuthenticatedUserContext","flush"]),m.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4};var s=(d.extensionConfig||{}).ApplicationInsightsAnalytics||{};if(!0!==d[I]&&!0!==s[I]){var c="onerror";t(["_"+c]);var u=T[c];T[c]=function(e,t,n,a,i){var r=u&&u(e,t,n,a,i);return!0!==r&&m["_"+c]({message:e,url:t,lineNumber:n,columnNumber:a,error:i}),r},d.autoExceptionInstrumented=!0}return m}(y.cfg);function a(){y.onInit&&y.onInit(n)}(T[t]=n).queue&&0===n.queue.length?(n.queue.push(a),n.trackPageView({})):a()}(window,document,{
src: "https://js.monitor.azure.com/scripts/b/ai.2.min.js", // The SDK URL Source
// name: "appInsights", // Global SDK Instance name defaults to "appInsights" when not supplied
// ld: 0, // Defines the load delay (in ms) before attempting to load the sdk. -1 = block page load and add to head. (default) = 0ms load after timeout,
// useXhr: 1, // Use XHR instead of fetch to report failures (if available),
crossOrigin: "anonymous", // When supplied this will add the provided value as the cross origin attribute on the script tag
// onInit: null, // Once the application insights instance has loaded and initialized this callback function will be called with 1 argument -- the sdk instance (DO NOT ADD anything to the sdk.queue -- As they won't get called)
cfg: { // Application Insights Configuration
instrumentationKey: "<YOUR INSTRUMENTATION KEY>"
}});
</script>
Not
Okunabilirlik ve olası JavaScript hatalarını azaltmak için, tüm olası yapılandırma seçenekleri yukarıdaki kod parçacığı kodunda yeni bir satırda listelenir. Açıklama satırına yorum yapılan bir satırın değerini değiştirmek istemiyorsanız kaldırılabilir.
2. Adım: Bağıntı için arama kimliği isteği
Arama isteklerini tıklamalarla ilişkilendirmek için bu iki ayrı olayla ilgili bir bağıntı kimliğine sahip olmak gerekir. Azure Bilişsel Arama, http üst bilgisi ile isteğiniz olduğunda size bir arama kimliği sağlar.
Arama kimliğinin olması, istek tarafından Azure Bilişsel Arama ölçümlerin Application Analizler'da günlüğe kaydetmeye devam eder.
C# kullanma (daha yeni v11 SDK)
En son SDK, bu örnekte ayrıntılı olarak üst bilgi ayarlamak için bir Http İşlem Hattı kullanımını gerektirir.
// Create a custom policy to add the correct headers
public class SearchIdPipelinePolicy : HttpPipelineSynchronousPolicy
{
public override void OnSendingRequest(HttpMessage message)
{
message.Request.Headers.SetValue("x-ms-azs-return-searchid", "true");
}
}
// This sample uses the .NET SDK https://www.nuget.org/packages/Azure.Search.Documents
SearchClientOptions clientOptions = new SearchClientOptions();
clientOptions.AddPolicy(new SearchIdPipelinePolicy(), HttpPipelinePosition.PerCall);
var client = new SearchClient("<SearchServiceName>", "<IndexName>", new AzureKeyCredential("<QueryKey>"), options: clientOptions);
Response<SearchResults<SearchDocument>> response = await client.SearchAsync<SearchDocument>(searchText: searchText, searchOptions: options);
string searchId = string.Empty;
if (response.GetRawResponse().Headers.TryGetValues("x-ms-azs-searchid", out IEnumerable<string> headerValues))
{
searchId = headerValues.FirstOrDefault();
}
C# kullanma (eski v10 SDK)
// This sample uses the .NET SDK https://www.nuget.org/packages/Microsoft.Azure.Search
var client = new SearchIndexClient(<SearchServiceName>, <IndexName>, new SearchCredentials(<QueryKey>));
// Use HTTP headers so that you can get the search ID from the response
var headers = new Dictionary<string, List<string>>() { { "x-ms-azs-return-searchid", new List<string>() { "true" } } };
var response = await client.Documents.SearchWithHttpMessagesAsync(searchText: searchText, searchParameters: parameters, customHeaders: headers);
string searchId = string.Empty;
if (response.Response.Headers.TryGetValues("x-ms-azs-searchid", out IEnumerable<string> headerValues))
{
searchId = headerValues.FirstOrDefault();
}
JavaScript kullanma (REST API'lerini çağırma)
request.setRequestHeader("x-ms-azs-return-searchid", "true");
request.setRequestHeader("Access-Control-Expose-Headers", "x-ms-azs-searchid");
var searchId = request.getResponseHeader('x-ms-azs-searchid');
3. Adım: Günlük Araması olayları
Bir kullanıcı tarafından bir arama isteği her düzende, bunu bir Application Analizler özel olayında aşağıdaki şemayla bir arama olayı olarak günlüğe Analizler gerekir. Yalnızca kullanıcı tarafından oluşturulan arama sorgularını günlüğe unutmayın.
- SearchServiceName: (dize) arama hizmeti adı
- SearchId:(guid) arama sorgusunun benzersiz tanımlayıcısı (arama yanıtını içerir)
- IndexName: (dize) sorgulanan arama hizmeti dizini
- QueryTerms:(dize) kullanıcı tarafından girilen arama terimleri
- ResultCount:(int) döndürülen belge sayısı (arama yanıtını içerir)
- ScoringProfile:(dize) varsa, kullanılan puanlama profilinin adı
Not
Arama sorgunuza $count=true ekleyerek kullanıcı tarafından oluşturulan sorgu sayısını talep etmek. Daha fazla bilgi için bkz. Belgeleri Arama (REST).
C# kullanma
var properties = new Dictionary <string, string>
{
{"SearchServiceName", <service name>},
{"SearchId", <search Id>},
{"IndexName", <index name>},
{"QueryTerms", <search terms>},
{"ResultCount", <results count>},
{"ScoringProfile", <scoring profile used>}
};
_telemetryClient.TrackEvent("Search", properties);
JavaScript kullanma
appInsights.trackEvent("Search", {
SearchServiceName: <service name>,
SearchId: <search id>,
IndexName: <index name>,
QueryTerms: <search terms>,
ResultCount: <results count>,
ScoringProfile: <scoring profile used>
});
4. Adım: Günlük Tıklama olayları
Kullanıcı bir belgeye her tıkladığında bu, arama analizi amacıyla günlüğe kaydedilmiş olması gereken bir sinyaldir. Bu olayları Analizler için Application Analizler özel olaylarını kullanın:
- ServiceName: (dize) arama hizmeti adı
- SearchId:(guid) ilgili arama sorgusunun benzersiz tanımlayıcısı
- DocId:(dize) belge tanımlayıcısı
- Arama sonuçları sayfasında belgenin konum: (int) sıralaması
Not
Konum, uygulamanıza ilişkin kardinale sırasına başvurur. Karşılaştırmaya izin vermek için bu s numarayı her zaman aynı olduğu sürece ayarlamakta serbestsiniz.
C# kullanma
var properties = new Dictionary <string, string>
{
{"SearchServiceName", <service name>},
{"SearchId", <search id>},
{"ClickedDocId", <clicked document id>},
{"Rank", <clicked document position>}
};
_telemetryClient.TrackEvent("Click", properties);
JavaScript kullanma
appInsights.trackEvent("Click", {
SearchServiceName: <service name>,
SearchId: <search id>,
ClickedDocId: <clicked document id>,
Rank: <clicked document position>
});
3 - Power BI
Uygulamanıza araç verdikten ve uygulamanın Application Analizler'a doğru şekilde bağlı olduğunu doğruladıktan sonra, Power BI desktop'ta verileri analiz etmek için önceden tanımlanmış bir Power BI indirirsiniz. Raporda, arama trafiği analizi için yakalanan ek verileri analiz etmek için yararlı olan önceden tanımlanmış grafikler ve tablolar yer almaktadır.
Panonun Azure Bilişsel Arama gezinti bölmesinin sol üst Ayarlar Trafik analizinde ara'ya tıklayın.
Trafik analizini ara sayfasındaki 3. adımda, trafiği yüklemek için Power BI Desktop Al'a Power BI.

Aynı sayfada, Raporu indir'e Power BI tıklayın.
Rapor, Power BI Desktop açılır ve Application Analizler'ye bağlanmanız ve kimlik bilgilerini girmeniz istenir. Bağlantı bilgilerini Application Azure portal kaynağınıza ilişkin Analizler bulabilirsiniz. Kimlik bilgileri için, portalda oturum açma için kullanabileceğiniz kullanıcı adını ve parolayı girin.

Yükle' ye tıklayın.
Rapor, arama performansınızı ve ilginizi geliştirmek için daha bilinçli kararlar almanıza yardımcı olan grafikleri ve tabloları içerir.
Ölçümler aşağıdaki öğeleri içerir:
- Ara birim ve en popüler terim-belge çiftleri: tıklamalar tarafından sıralanan, aynı belge ile sonuçlanan terimler.
- Tıklama olmadan arar: tıklamadan kaydeden en iyi sorgular için terimler
Aşağıdaki ekran görüntüsünde, tüm şema öğelerini kullandıysanız bir yerleşik raporun nasıl görünebileceğini gösterilmektedir.

Sonraki adımlar
Arama hizmetinize yönelik güçlü ve öngörülü veriler almak için arama uygulamanızı işaretleyin.
Application Insights hakkında daha fazla bilgi bulabilir ve farklı hizmet katmanları hakkında daha fazla bilgi edinmek için fiyatlandırma sayfasını ziyaret edebilirsiniz.
Harika raporlar oluşturma hakkında daha fazla bilgi edinin. ayrıntılar için bkz. Power BI Desktop kullanmaya başlama.