GlideSPSearchAnalytics - 전역
GlideSPSearchAnalytics API는 사용자 지정 ServiceNow 검색 위젯에서 검색 분석을 생성하는 메서드를 제공합니다.
기본적으로, 검색 이벤트 [sys_search_event]와 검색 소스 이벤트 [sys_search_source_event] 테이블은 기본 시스템 검색 위젯에서 검색 데이터를 수집합니다. 그러나 사용자 지정 검색 위젯은 이 기능의 이점을 얻지 못합니다. 전역 환경에서 사용자 지정 검색 위젯의 서버 스크립트에서 이 API를 사용하여 검색 데이터를 검색 이벤트 테이블로 보냅니다. 생성 사용자를 위한 관련 검색 제안과, 모니터 검색 분석으로 사용자들이 무엇을 검색하고 있고 필요한 것을 찾는지 여부를 이해합니다.
- 검색어
- 클릭한 항목의 순위
- 검색 결과를 구체화하는 데 사용되는 필터
- 검색 결과 첫 페이지의 테이블 이름 및 기록 식별자
- 브라우저 및 위치를 포함하여 클릭한 검색 결과
검색 제안은 ServiceNow AI Platform 기능입니다. 자세한 내용은 검색 제안을 참조하십시오.
GlideSPSearchAnalytics - 게시(문자열 페이로드)
검색 결과에 대한 검색 이벤트 [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;
}