GlideSPSearchAnalytics - グローバル

  • リリースバージョン: Yokohama
  • 更新日 2025年01月30日
  • 所要時間:13分
  • GlideSPSearchAnalytics API は、カスタムウィジェットServiceNow検索ウィジェットから検索アナリティクスを生成するメソッドを提供します。

    デフォルトでは、イベント検索 [sys_search_event] テーブルとソースイベント検索 [sys_search_source_event] テーブルが、ベースシステム検索ウィジェットから検索データを収集します。 ただし、カスタム検索ウィジェットではこの機能のメリットが得られません。グローバル環境のカスタム検索ウィジェットのサーバースクリプトでこの API を使用し、検索イベントテーブルに検索データを送信します。生成するもの:ユーザーに関連する検索の提案。ユーザーが何を検索しているか、ユーザーが必要なものを見つけてるかどうかを把握するために、検索のアナリティクスを監視します。

    この 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] テーブルに検索データを送信します。

    表 : 1. パラメーター
    名前 タイプ 説明
    payload 文字列 検索結果の検索イベント [sys_search_event] テーブル、ソース別検索イベント [sys_search_source_event] テーブル、および検索シグナルイベント [sys_search_signal_event] テーブルに送信する検索データ、またはユーザーが検索結果をクリックしたときに、クリックした検索結果 [sys_search_result_clicked] テーブルおよび検索シグナル結果イベント [sys_search_signal_result_event] テーブルに送信する検索データを含む文字列 format の JSON ペイロード。収集する検索データのタイプに応じて、ペイロードをキーと値のペアとして構成します。
    • ユーザーが用語を検索したときにデータを収集します。
      • query:文字列。検索対象のクエリ。
      • portal_id:文字列。サービスポータル [sp_portal] テーブルのポータルレコードの sys_id。
      • page_id:文字列。ページ [sp_page] テーブルのページレコードの sys_id。
      • results_per_source:アレイ。各検索ソースから返された結果の数。
        • source_id:文字列。検索ソース [sp_search_source] テーブルの検索ソースレコードの sys_id。
        • number_of_results:数値。指定された検索ソースのクエリから返された結果の数。
      • ais_profile:文字列。検索に適用される検索プロファイルの sys_id。AI 検索 エンジンで行われた検索にのみ適用されます。
      • search_results:アレイ。検索結果の最初のページに返される結果。
        • record_id:文字列。検索結果レコードの sys_id。
        • table_name:文字列。検索結果レコードが見つかったテーブルの名前。
      • refinement_occurred:ブーリアン。ユーザーが検索結果をフィルタリングした場合は true、それ以外の場合は false。
    • ユーザーが検索結果を絞り込むときにデータを収集します。
      • query:文字列。検索対象のクエリ。
      • portal_id:文字列。サービスポータル [sp_portal] テーブルのポータルレコードの sys_id。
      • page_id:文字列。ページ [sp_page] テーブルのページレコードの sys_id。
      • refinement_occurred:ブーリアン。ユーザーが検索結果をフィルタリングした場合は true、それ以外の場合は false。
    • ユーザーが選択した検索結果のランクを収集します。
      • query:文字列。検索対象のクエリ。
      • portal_id:文字列。サービスポータル [sp_portal] テーブルのポータルレコードの sys_id。
      • click_rank:番号。ユーザーが選択したアイテムのランク。たとえば、ユーザーが検索結果のリストの 3 番目のアイテムをクリックした場合、値は 3 です。
    • ユーザーがクリックした検索結果に関する情報を収集します。クリックした検索結果 [sys_search_result_clicked] テーブルへのデータログ。
      • query:文字列。検索対象のクエリ。
      • portal_id:文字列。サービスポータル [sp_portal] テーブルのポータルレコードの sys_id。
      • page_id:文字列。ページ [sp_page] テーブルのページレコードの sys_id。
      • results_per_source:アレイ。各検索ソースから返された結果の数。
        • source_id:文字列。検索ソース [sp_search_source] テーブルの検索ソースレコードの sys_id。
        • number_of_results:数値。指定された検索ソースのクエリから返された結果の数。
      • refinement_occurred:ブーリアン。ユーザーが検索結果をフィルタリングした場合は true、それ以外の場合は false。
      • click_rank:番号。ユーザーが選択したアイテムのランク。たとえば、ユーザーが検索結果のリストの 3 番目のアイテムをクリックした場合、値は 3 です。
      • browser_info:文字列。ブラウザー名、バージョン、およびプラットフォームをログに記録します。
      • location:単精度浮動小数点数。ユーザーの場所の緯度と経度の座標をログに記録します。
      • result_clicked_sys_id:文字列。ユーザーが選択した結果の sys_id。
      • label_description:文字列。ユーザーが選択した結果の説明。
      • source_table:文字列。選択した結果を含むソーステーブルの名前。
      • ais_doc_id:文字列。ユーザーが選択した各結果のソーステーブルのアンダースコアで区切った名前と sys_id。たとえば、ユーザーがナレッジ [kb_knowledge] テーブルの結果をクリックした場合、値の形式は kb_knowledge_3020c9b14843210e9db4b5b08b9a712d になります。AI 検索 エンジンで行われた検索にのみ適用されます。
    • ユーザーが用語を検索するとデータを収集し、ユーザーがクリックした検索結果を収集します。
      • query:文字列。検索対象のクエリ。
      • portal_id:文字列。サービスポータル [sp_portal] テーブルのポータルレコードの sys_id。
      • page_id:文字列。ページ [sp_page] テーブルのページレコードの sys_id。
      • results_per_source:アレイ。各検索ソースから返された結果の数。
        • source_id:文字列。検索ソース [sp_search_source] テーブルの検索ソースレコードの sys_id。
        • number_of_results:数値。指定された検索ソースのクエリから返された結果の数。
      • ais_profile:文字列。検索に適用される検索プロファイルの sys_id。AI 検索 エンジンで行われた検索にのみ適用されます。
      • search_results:アレイ。検索結果の最初のページに返されるレコードのサマリー。
        • record_id:文字列。検索結果レコードの sys_id。
        • table_name:文字列。検索結果レコードが見つかったテーブルの名前。
      • click_rank:番号。ユーザーが選択したアイテムのランク。たとえば、ユーザーが検索結果のリストの 3 番目のアイテムをクリックした場合、値は 3 です。
      • ais_doc_id:文字列。ユーザーが選択した各結果のソーステーブルのアンダースコアで区切った名前と sys_id。たとえば、ユーザーがナレッジ [kb_knowledge] テーブルの結果をクリックした場合、値の形式は kb_knowledge_3020c9b14843210e9db4b5b08b9a712d になります。AI 検索 エンジンで行われた検索にのみ適用されます。
    表 : 2. 返される内容
    タイプ 説明
    なし

    この例では、検索データを検索分析テーブルに直接渡します。

    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;
    }