GlideSPSearchAnalytics : global
L’API GlideSPSearchAnalytics fournit des méthodes permettant de générer des analyses de recherche à partir de widgets de recherche personnalisés ServiceNow .
Par défaut, les tables Événements de recherche [sys_search_event] et Événements de source de recherche [sys_search_source_event] collectent des données de recherche à partir des widgets de recherche du système de base. Toutefois, les widgets de recherche personnalisés ne bénéficient pas de cette fonctionnalité. Utilisez cette API dans le script serveur des widgets de recherche personnalisés dans des environnements globaux pour envoyer des données de recherche aux tables d’événements de recherche. Générer Suggestions de recherche pertinentes pour vos utilisateurs et surveillez les analyses de recherche pour comprendre ce que vos utilisateurs recherchent et s’ils trouvent ce dont ils ont besoin.
- Termes recherchés
- Classement des éléments cliqués
- Filtres utilisés pour affiner les résultats de recherche
- Noms de tables et identificateurs d’enregistrement de la première page des résultats de recherche
- Résultats de recherche cliqués, y compris le navigateur et l’emplacement
Suggestions de recherche est une ServiceNow AI Platform fonctionnalité. Pour plus d’informations, voir Suggestions de recherche.
GlideSPSearchAnalytics : publier (charge utile de la chaîne)
Envoie des données de recherche aux tables Événement de recherche [sys_search_event], Événement de recherche par source [sys_search_source_event] et Événement de signal de recherche [sys_search_signal_event] pour les résultats de recherche, ou aux tables Résultat de recherche cliqué [sys_search_result_clicked] et Événement de résultat de signal de recherche [sys_search_signal_result_event] lorsqu’un utilisateur clique sur un résultat de recherche.
| Nom | Type | Description |
|---|---|---|
| charge utile | Chaîne | Charge utile JSON au format chaîne contenant les données de recherche à envoyer aux tables Événement de recherche [sys_search_event], Événement de recherche par source [sys_search_source_event] et Événement de signal de recherche [sys_search_signal_event] pour les résultats de recherche, ou aux tables Résultat de recherche cliqué [sys_search_result_clicked] et Événement de résultat de signal de recherche [sys_search_signal_result_event] lorsqu’un utilisateur clique sur un résultat de recherche. Structurez les charges utiles sous forme de paires clé-valeur en fonction du type de données de recherche que vous souhaitez collecter.
|
| Type | Description |
|---|---|
| Néant |
Cet exemple transmet des données de recherche directe aux tables d’analyse de recherche.
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));
Cet exemple collecte dynamiquement des données de recherche directe à partir d’un widget de recherche personnalisé et les transmet aux tables d’analyse de recherche.
//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;
}
Cet exemple collecte des données directes sur les résultats de recherche cliqués à partir d’un widget de recherche personnalisé et les transmet à la table d’analyse de recherche [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;
}