GlideSPSearchAnalytics - グローバル
GlideSPSearchAnalytics API は、カスタムウィジェットServiceNow検索ウィジェットから検索アナリティクスを生成するメソッドを提供します。
デフォルトでは、イベント検索 [sys_search_event] テーブルとソースイベント検索 [sys_search_source_event] テーブルが、ベースシステム検索ウィジェットから検索データを収集します。 ただし、カスタム検索ウィジェットではこの機能のメリットが得られません。グローバル環境のカスタム検索ウィジェットのサーバースクリプトでこの API を使用し、検索イベントテーブルに検索データを送信します。生成するもの:ユーザーに関連する検索の提案。ユーザーが何を検索しているか、ユーザーが必要なものを見つけてるかどうかを把握するために、検索のアナリティクスを監視します。
- 検索された用語
- クリックされたアイテムのランク
- 検索結果を絞り込むために使用するフィルター
- 検索結果の最初のページのテーブル名とレコード識別子
- ブラウザーと場所を含む、クリックされた検索結果
検索提案は Now Platform の機能です。詳細については、「検索提案」を参照してください。
GlideSPSearchAnalytics - publish(文字列 payload)
検索結果の検索イベント [sys_search_event] テーブル、ソース別検索イベント [sys_search_source_event] テーブルおよび検索シグナルイベント [sys_search_signal_event] テーブルに、またはユーザーが検索結果をクリックした場合は、クリックした検索結果 [sys_search_result_clicked] テーブルおよび検索シグナル結果イベント [sys_search_signal_result_event] テーブルに検索データを送信します。
| 名前 | タイプ | 説明 |
|---|---|---|
| payload | 文字列 | 検索結果の検索イベント [sys_search_event] テーブル、ソース別検索イベント [sys_search_source_event] テーブル、および検索シグナルイベント [sys_search_signal_event] テーブルに送信する検索データ、またはユーザーが検索結果をクリックしたときに、クリックした検索結果 [sys_search_result_clicked] テーブルおよび検索シグナル結果イベント [sys_search_signal_result_event] テーブルに送信する検索データを含む文字列 format の JSON ペイロード。収集する検索データのタイプに応じて、ペイロードをキーと値のペアとして構成します。
|
| タイプ | 説明 |
|---|---|
| なし |
この例では、検索データを検索分析テーブルに直接渡します。
var searchObject = new GlideSPSearchAnalytics();
var payload = {
'query': 'how do i get a new computer',
'portal_id': '81b75d3147032100ba13a5554ee4902b',
'page_id': '87466b63c3223100c8b837659bba8feb',
'results_per_source': [{
'source_id': 'bf2c4c15b3a31300e64be12b86a8dcb7',
'number_of_results': 2,
}, {
'source_id': 'c96eb1686721220023c82e08f585efff',
'number_of_results': 1
}],
'refinement': false,
'search_results': [{
'record_id': 'KB Article 1',
'table_name': 'knowledge'
}, {
'record_id': 'KB Article 2',
'table_name': 'knowledge'
}, {
'record_id': 'Employee Help',
'table_name': 'userportal'
}]
};
var directSearchData = searchObject.publish(JSON.stringify(payload));
この例では、カスタム検索ウィジェットから直接検索データを動的に収集し、検索分析テーブルに渡します。
//client script
var payload = {
query: this.data.query,
portal_id: this.data.portalID,
page_id: this.data.pageID,
results_per_source: getSearchSources(),
refinement_occurred: false,
};
var payloadObject = {
action: "TestAction",
payload: payload,
};
c.server.get(payloadObject);
//server script
if (input && input.action === "TestAction") {
input.action = "";
var textSearchAnalytics = new GlideSPSearchAnalytics().publish(JSON.stringify(input.payload));
return;
}
この例では、カスタム検索ウィジェットからクリックされた検索データを直接収集し、検索分析 [sys_search_result_clicked] テーブルに渡します。
//client script
function setUserLocationCoords(cb) {
var onSuccess = function(pos) {
return cb({
latitude: pos.coords.latitude,
longitude: pos.coords.longitude,
});
};
var onError = function() {
return cb({
latitude: null,
longitude: null,
});
};
return window.navigator.geolocation.getCurrentPosition(onSuccess, onError, {
enableHighAccuracy: true,
});
}
function trackSearchResultClicked(resultClicked, rank) {
if (!rank || rank < 1) return;
var c = $scope;
var query = _.get(c.data, "q");
var results = _.get(c.data, "results", []);
var result = results.find(function(e) {
return e.primary.trim() === resultClicked.trim();
});
var description = result.name != null ? result.name : result.primary;
var sourceTable = result.table != null ? result.table : null;
var payloadObject = {
action: "TestAction",
payload: {
query: query,
portal_id: c.portal.sys_id,
page_id: $scope.page && $scope.page.id,
results_per_source: getSearchSources(c),
refinement_occurred: false,
click_rank: rank,
browser_info: $window.navigator.userAgent,
location: {},
result_clicked_sys_id: result.sys_id,
label_description: description,
source_table: sourceTable,
},
};
setUserLocationCoords(function(coords) {
payloadObject.payload.location.latitude = coords.latitude;
payloadObject.payload.location.longitude = coords.longitude;
$window.spSearchAnalytics = {
query: query,
refinement_occurred: false,
};
c.server.get(payloadObject);
});
}
// Event delegation for Updating click rank
$(".panel").on("click", ".result-item a", function(e) {
var index = $(e.currentTarget).parent().parent().data("index");
var resultClicked = e.currentTarget.innerText;
trackSearchResultClicked(resultClicked, index + 1);
});
// server script
if (input && input.action === "TestAction") {
input.action = "";
var textSearchAnalytics = new GlideSPSearchAnalytics().publish(JSON.stringify(input.payload));
return;
}