GeniusResultAnswer - スコープ付き

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:17分
  • GeniusResultAnswer API は、Genius 結果構成のプロセッサースクリプトで回答オブジェクトを作成するためのメソッドを提供します。この API で作成された回答は、Genius 結果の回答カードに入力できる検索要求またはキー/値ペアのマップを定義します。

    GeniusResultContext API を使用して、Genius 結果構成のコンテキストから取得されたクエリの詳細を回答オブジェクトに入力できます。

    回答オブジェクトを作成するために呼び出す必要がある GeniusResultAnswer API メソッドは、スクリプトに使用している AI 検索 Genius 結果構成フォームフィールドによって異なります。
    • Genius 結果構成の AI Search request processor フィールドでスクリプトを作成する場合は、 setTable() メソッドと、 setSearchPhrase()addSearchPhrases()、または setEncodedQuery() メソッドのいずれかを呼び出す必要があります。他のすべてのメソッドは、このユースケースに関連しない addDataMap() を除いてオプションです。
    • Genius 結果構成の AI Search response processor フィールドでスクリプトを作成する場合は、 addDataMap() メソッドを呼び出す必要があります。このユースケースに関連する他のメソッドはありません。
    この API を Genius 結果のサーバー側スクリプトで使用し、名前空間識別子を sn_ais にします。Genius 結果のスクリプティングロジックの詳細については、「 新しい Genius 結果構成の作成」を参照してください。

    GeniusResultAnswer – addDataMap(オブジェクト map)

    Genius 結果構成の AI Search response processor スクリプトで、任意のキーと値のペアのフィールドを使用して Genius 結果回答を定義します。任意のパブリック Now Platform API を利用してこれらのフィールドを生成できます。

    注:
    Genius 結果構成の AI Search response processor フィールドでスクリプトを作成する場合は、このメソッドを呼び出す必要があります。このメソッドを呼び出さないと、Genius 結果はトリガーされたときに回答を返しません。

    このメソッドを複数回呼び出すことで、1 つの AI Search response processor スクリプトに複数のフィールドマップを追加できます。各フィールドマップには個別の Genius 結果の回答カードが入力されます。

    表 : 1. パラメーター
    名前 タイプ 説明
    map オブジェクト

    AI 検索からの検索クエリ応答に追加するキーと値のペアフィールドの任意のセットを定義します。すべてのフィールド値は文字列でなければなりません。

    {
      "fieldName1": String,
      "fieldName2": String
    }
    表 : 2. 返される内容
    タイプ 説明
    ブール

    メソッドの呼び出しが成功したかどうかを示すフラグ。

    有効な値:
    • true:メソッドの呼び出しに成功しました。
    • false:メソッドの呼び出しに失敗しました。

    この AI Search response processor スクリプトは、カスタムタイトルフィールドと URL キーと値のペアフィールドを回答オブジェクトに追加して、Genius 結果回答カードに表示します。

    function process(context) {
      var answer = new sn_ais.GeniusResultAnswer();
    
      var customFieldMap = {
        "title": "My custom Genius Result answer",
        "url": "https://example.com/myGeniusResultLink"
      }
    
      answer.addDataMap(customFieldMap);
    
      return answer;
    }

    GeniusResultAnswer – addSearchPhrases(アレイ searchPhrases)

    Genius 結果構成の AI Search request processor スクリプトで定義された検索クエリに用語を追加します。

    注:
    Genius 結果構成の AI Search request processor フィールドでスクリプトを作成する場合は、 setTable() メソッドと、 setSearchPhrase()addSearchPhrases()、または setEncodedQuery() メソッドのいずれかを呼び出す必要があります。必要なメソッドを両方とも呼び出さないと、Genius 結果はトリガーされたときに回答を返しません。
    表 : 3. パラメーター
    名前 タイプ 説明
    searchPhrases アレイ

    Genius 結果構成の AI Search request processor スクリプトで定義された検索クエリの検索用語として追加する任意の文字列のアレイ。 AI 検索 は、これらの検索用語を OR 演算子で区切られたものとして扱います。

    例:
    [
      "Term": String,
      "Quoted phrase": String
    ]
    表 : 4. 返される内容
    タイプ 説明
    ブール

    メソッドの呼び出しが成功したかどうかを示すフラグ。

    有効な値:
    • true:メソッドの呼び出しに成功しました。
    • false:メソッドの呼び出しに失敗しました。

    この AI Search request processor スクリプトは、 Beth またはAnglin という用語を含むユーザー [sys_user] テーブルのレコードに対する検索クエリを作成します。

    function process(context) {
      var answer = new sn_ais.GeniusResultAnswer();
    
      answer.setTable('sys_user');
      answer.addSearchPhrases(['Beth','Anglin']);
    
      return answer;
    }

    GeniusResultAnswer – setEncodedQuery(文字列 query)

    Genius 結果構成の AI Search request processor スクリプトでエンコードされた検索クエリを指定します。このエンコードされた検索クエリの結果は、Genius 結果回答カードとして表示されます。

    注:
    Genius 結果構成の AI Search request processor フィールドでスクリプトを作成する場合は、 setTable() メソッドと、 setSearchPhrase()addSearchPhrases()、または setEncodedQuery() メソッドのいずれかを呼び出す必要があります。必要なメソッドを両方とも呼び出さないと、Genius 結果はトリガーされたときに回答を返しません。
    表 : 5. パラメーター
    名前 タイプ 説明
    クエリ 文字列 Genius 結果構成のAI Search request processorスクリプトからAI 検索に送信するエンコードされた検索クエリ。
    表 : 6. 返される内容
    タイプ 説明
    ブール

    メソッドの呼び出しが成功したかどうかを示すフラグ。

    有効な値:
    • true:メソッドの呼び出しに成功しました。
    • false:メソッドの呼び出しに失敗しました。

    この AI Search request processor スクリプトは、ユーザー [sys_user] テーブルに対してエンコードされた検索クエリを作成します。最後のクエリは、ユーザーの元の検索クエリで検出されたエンティティから生成された複数のサブクエリを結合します。

    function process(context) {
      var answer = new sn_ais.GeniusResultAnswer();
    
      answer.setTable('sys_user');
      answer.setSearchLimit(2);
      answer.spellCheck(false);
      var queries = [];
      var matchingSegments;
      var predictionResult = context.getPredictionResult();
      if (predictionResult && predictionResult.length == 1) {
        var detail = predictionResult[0];
        if (detail['result'] && detail['result']['entities']) {
          var entities = detail['result']['entities'];
          for (var i = 0; i < entities.length; i++) {
            if (entities[i]['name'].endsWith('personName')) {
              matchingSegments = entities[i]['matchingSegments'];
              for (var j = 0; j < matchingSegments.length; j++)
                answer.addSearchPhrases([matchingSegments[j]['value']]);
            } else if (entities[i]['name'].endsWith('cityLocation')) {
              matchingSegments = entities[i]['matchingSegments'];
              if (matchingSegments && matchingSegments.length > 0)
                queries.push('location.nameLIKE' + matchingSegments[0]['value']);
            } else if (entities[i]['name'].endsWith('departmentName')) {
              matchingSegments = entities[i]['matchingSegments'];
              if (matchingSegments && matchingSegments.length > 0)
                queries.push('department.nameLIKE' + matchingSegments[0]['value']);
            } else if (entities[i]['name'].endsWith('jobTitle')) {
              matchingSegments = entities[i]['matchingSegments'];
              if (matchingSegments && matchingSegments.length > 0)
                queries.push('titleLIKE' + matchingSegments[0]['value']);
            }
          }
        }
      }
    
      if (queries.length > 0)
        answer.setEncodedQuery(queries.join('^'));
    
      return answer;
    }

    GeniusResultAnswer – setSearchLimit(数値 searchLimit)

    Genius 結果構成の AI Search request processor スクリプトで定義された検索クエリに対して返される結果の最大数を制限します。デフォルトでは、検索クエリは最大 3 つの結果を返します。

    表 : 7. パラメーター
    名前 タイプ 説明
    searchLimit 番号

    Genius 結果構成の AI Search request processor スクリプトで定義された検索クエリに対して返される検索結果の最大数の正の整数値。3 よりも大きい値は無効です。

    デフォルト値:3

    表 : 8. 返される内容
    タイプ 説明
    ブール

    メソッドの呼び出しが成功したかどうかを示すフラグ。

    有効な値:
    • true:メソッドの呼び出しに成功しました。
    • false:メソッドの呼び出しに失敗しました。

    この AI Search request processor スクリプトは、カタログアイテム [sc_cat_item] テーブルから 「ラップトップ 」という用語を含むレコードを検索し、最大 2 件の結果を返します。

    function process(context) {
      var answer = new sn_ais.GeniusResultAnswer();
    
      answer.setTable('sc_cat_item');
      answer.setSearchPhrase('laptop');
      answer.setSearchLimit(2);
    
      return answer;
    }

    GeniusResultAnswer – setSearchPhrase(文字列 searchPhrase)

    Genius 結果構成の AI Search request processor スクリプトで定義された検索クエリの用語を指定します。

    注:
    Genius 結果構成の AI Search request processor フィールドでスクリプトを作成する場合は、 setTable() メソッドと、 setSearchPhrase()addSearchPhrases()、または setEncodedQuery() メソッドのいずれかを呼び出す必要があります。必要なメソッドを両方とも呼び出さないと、Genius 結果はトリガーされたときに回答を返しません。
    表 : 9. パラメーター
    名前 タイプ 説明
    searchPhrase 文字列

    Genius 結果構成の AI Search request processor スクリプトで定義された検索クエリに使用する用語。

    Genius 結果構成をトリガーしたクエリからの検索用語を保持する場合は、このパラメーターを GeniusResultContext.getOriginalSearchPhrase() メソッドによって返される文字列値に設定します。

    表 : 10. 返される内容
    タイプ 説明
    ブール

    メソッドの呼び出しが成功したかどうかを示すフラグ。

    有効な値:
    • true:メソッドの呼び出しに成功しました。
    • false:メソッドの呼び出しに失敗しました。

    この AI Search request processor スクリプトは、ユーザー [sys_user] テーブルから「 Anglin」という用語を含むレコードの検索クエリを作成します。

    function process(context) {
      var answer = new sn_ais.GeniusResultAnswer();
    
      answer.setTable('sys_user');
      answer.setSearchPhrase('Anglin');
    
      return answer;
    }

    GeniusResultAnswer – setTable(文字列 table)

    Genius 結果構成の AI Search request processor スクリプトで定義された検索クエリを特定のテーブルに制限します。クエリは、指定されたテーブルの検索結果のみを Genius 結果回答カードとして返します。

    注:
    Genius 結果構成のAI Search request processorフィールドでスクリプトを作成する場合は、このメソッドと、setSearchPhrase()、addSearchPhrases()、または setEncodedQuery() メソッドのいずれかを呼び出す必要があります。必要なメソッドを両方とも呼び出さないと、Genius 結果はトリガーされたときに回答を返しません。
    表 : 11. パラメーター
    名前 タイプ 説明
    table 文字列 Now Platform テーブルの名前です。このテーブルのインデックス付きレコードのみが、Genius 結果構成の AI Search request processor スクリプトで定義された検索クエリの結果として返されます。
    表 : 12. 返される内容
    タイプ 説明
    ブール

    メソッドの呼び出しが成功したかどうかを示すフラグ。

    有効な値:
    • true:メソッドの呼び出しに成功しました。
    • false:メソッドの呼び出しに失敗しました。

    この AI Search request processor スクリプトは、ユーザー [sys_user] テーブルから「 Anglin」という用語を含むレコードの検索クエリを作成します。

    function process(context) {
      var answer = new sn_ais.GeniusResultAnswer();
    
      answer.setTable('sys_user');
      answer.setSearchPhrase('Anglin');
    
      return answer;
    }

    GeniusResultAnswer – spellCheck(ブール spellCheck)

    Genius 結果構成の AI Search request processor スクリプトで定義された検索クエリに対してタイポ処理の自動修正 (スペルチェック) を実行するかどうかを指定します。

    Genius 結果構成の AI Search request processor スクリプトでこのメソッドを呼び出さない場合、定義された検索クエリは、Genius 結果構成をトリガーする検索クエリからタイポ処理フラグを継承します。

    表 : 13. パラメーター
    名前 タイプ 説明
    spellCheck ブーリアン

    Genius 結果構成の AI Search request processor スクリプトで定義された検索クエリに対してタイポ処理の自動修正を実行するかどうかを示すフラグ。

    有効な値:
    • true:検索クエリのタイポ自動修正処理を実行します。
    • false:検索クエリのタイポ自動修正処理をバイパスします。

    デフォルト:true

    表 : 14. 返される内容
    タイプ 説明
    なし

    この AI Search request processor スクリプトは、ユーザー [sys_user] テーブルに対する検索クエリのタイポ処理の自動修正を無効にします。

    function process(context) {
      var answer = new sn_ais.GeniusResultAnswer();
    
      answer.setTable('sys_user');
      answer.setSearchLimit(2);
      answer.spellCheck(false);
      var queries = [];
      var matchingSegments;
      var predictionResult = context.getPredictionResult();
      if (predictionResult && predictionResult.length == 1) {
        var detail = predictionResult[0];
        if (detail['result'] && detail['result']['entities']) {
          var entities = detail['result']['entities'];
          for (var i = 0; i < entities.length; i++) {
            if (entities[i]['name'].endsWith('personName')) {
              matchingSegments = entities[i]['matchingSegments'];
              for (var j = 0; j < matchingSegments.length; j++)
                answer.addSearchPhrases([matchingSegments[j]['value']]);
            } else if (entities[i]['name'].endsWith('cityLocation')) {
              matchingSegments = entities[i]['matchingSegments'];
              if (matchingSegments && matchingSegments.length > 0)
                queries.push('location.nameLIKE' + matchingSegments[0]['value']);
            } else if (entities[i]['name'].endsWith('departmentName')) {
              matchingSegments = entities[i]['matchingSegments'];
              if (matchingSegments && matchingSegments.length > 0)
                queries.push('department.nameLIKE' + matchingSegments[0]['value']);
            } else if (entities[i]['name'].endsWith('jobTitle')) {
              matchingSegments = entities[i]['matchingSegments'];
              if (matchingSegments && matchingSegments.length > 0)
                queries.push('titleLIKE' + matchingSegments[0]['value']);
            }
          }
        }
      }
    
      if (queries.length > 0)
        answer.setEncodedQuery(queries.join('^'));
    
      return answer;
    }