GlideSPSearchAnalytics - グローバル
GlideSPSearchAnalytics API は、カスタムServiceNow検索ウィジェットから検索アナリティクスを生成するメソッドを提供します。
デフォルトでは、イベント検索 [sys_search_event] テーブルとソースイベント検索 [sys_search_source_event] テーブルが、ベースシステム検索ウィジェットから検索データを収集します。 ただし、カスタム検索ウィジェットにはこの機能のメリットはありません。グローバル環境のカスタム検索ウィジェットのサーバースクリプトでこの API を使用して、検索データを検索イベントテーブルに送信します。ユーザーに関連する検索の提案。ユーザーが何を検索しているか、ユーザーが必要なものを見つけてるかどうかを把握するために、検索のアナリティクスを監視します。 を生成
- 検索された用語
- クリックされたアイテムのランク
- 検索結果の絞り込みに使用されるフィルター
- 検索結果の最初のページからのテーブル名とレコード識別子
- ブラウザと場所を含む検索結果がクリックされました
検索提案は Now Platform の機能です。詳細については、「検索提案」を参照してください。
GlideSPSearchAnalytics - publish(文字列ペイロード)
ユーザーが検索結果をクリックしたときに、検索イベント [sys_search_event]、ソース別検索イベント [sys_search_source_event]、検索シグナルイベント [sys_search_signal_event] テーブル、またはユーザーが検索結果をクリックしたときに検索結果クリック [sys_search_result_clicked] テーブルと検索シグナル結果イベント [sys_search_signal_result_event] テーブルに検索データを送信します。
| 名前 | タイプ | 説明 |
|---|---|---|
| ペイロード | 文字列 | ユーザーが検索結果をクリックしたときに、検索イベント [sys_search_event]、ソース別検索イベント [sys_search_source_event]、検索シグナルイベント [sys_search_signal_event] テーブル、またはクリックされた検索結果 [sys_search_result_clicked] テーブルと検索シグナルイベント [sys_search_signal_result_event] テーブルに送信する検索データを含む文字列形式の 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;
}