GlideSPSearchAnalytics – Global
Generiert Suchanalysen aus benutzerdefinierten ServiceNow Such-Widgets.
Standardmäßig erfassen die Tabellen „Suchereignisse“ [sys_search_event] und „Suchquellenereignisse“ [sys_search_source_event] Suchdaten aus Such-Widgets des Basissystems. Benutzerdefinierte Such-Widgets profitieren jedoch nicht von dieser Funktion. Verwenden Sie diese API im Serverskript von benutzerdefinierten Such-Widgets in globalen Umgebungen, um Suchdaten an die Suchereignistabellen zu senden. Generieren Zeigen Sie relevante Suchvorschläge für Ihre Benutzer an und überwachen Sie Suchanalysen, um zu verstehen, was Ihre Benutzer suchen und ob sie finden, was sie benötigen.
- Gesuchte Begriffe
- Rang der angeklickten Elemente
- Filter zum Verfeinern der Suchergebnisse
- Tabellennamen und Datensatzbezeichner von der ersten Seite der Suchergebnisse
- Angeklickte Suchergebnisse, einschließlich Browser und Standort
Suchvorschläge sind eine Now Platform-Funktion. Weitere Informationen finden Sie unter Suchvorschläge.
GlideSPSearchAnalytics – veröffentlichen(String payload)
Sendet Suchdaten an die Tabellen „Suchereignis“ [sys_search_event], „Suchereignis pro Quelle“ [sys_search_source_event] und „Suchsignalereignis“ [sys_search_signal_event] für Suchergebnisse oder an die Tabellen „Suchergebnis angeklickt“ [sys_search_result_clicked] und „Suchsignalergebnis-Event“ [sys_search_signal_result_event], wenn ein Benutzer auf ein Suchergebnis klickt.
| Name | Typ | Beschreibung |
|---|---|---|
| Nutzlast | Zeichenfolge | JSON-Nutzlast im Zeichenfolgenformat, das die Suchdaten enthält, die an die Tabellen „Suchereignis“ [sys_search_event], „Suchereignis pro Quelle“ [sys_search_source_event] und „Suchsignalereignis“ [sys_search_signal_event] für Suchergebnisse oder an die Tabellen „Suchergebnis angeklickt“ [sys_search_result_clicked] und „Suche“ gesendet werden sollen Signalergebnis-Event-Tabellen [sys_search_signal_result_event], wenn ein Benutzer auf ein Suchergebnis klickt. Strukturieren Sie die Nutzlast als Schlüssel-Wert-Paare entsprechend der Art der Suchdaten, die Sie erfassen möchten.
|
| Typ | Beschreibung |
|---|---|
| Keine |
In diesem Beispiel werden Suchdaten direkt an die Suchanalysetabellen übergeben.
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));
In diesem Beispiel werden dynamisch direkte Suchdaten aus einem benutzerdefinierten Such-Widget erfasst und an die Suchanalysetabellen übergeben.
//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;
}
In diesem Beispiel werden Daten zu direkten Suchergebnissen und angeklickten Daten aus einem benutzerdefinierten Such-Widget erfasst und an die Suchanalysetabelle [sys_search_result_clicked] übergeben.
//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;
}