Sitecore Search - 複数言語のコンテンツインポート(後編)

公開日 :

前回はコンテンツに関して URL を利用した ID を作成するところまで進めました。今回は、ロケールの部分を外して、多言語でのクロールの機能を使っていく部分を紹介していきます。

ロケールの追加

今回は 5 つの言語を利用していきます。まずドメイン設定のページで言語を増やし(スーパーユーザーの権限が必要です)、対象となる言語を追加します。今回は以下の通りです。

random desc

サイトの URL でロケールは以下のような形で今後設定をしていきます。

  • ja-jp、de-de、zh-cn の URL を採用している国のサイト

  • da (デンマーク語)に関してはロケールではなく言語

  • デフォルトの言語は英語

  • es-es、fr-fr、it-it に関しては今回は対象外とする

Web Crawler Settings の設定

いくつかの言語に関してはクロール対象外とするために、Exclusion Patters に追加していきます。

random desc

Available Locales の設定

もともと en-us のみを設定していましたが、今回は 5 つの言語を指定します。

random desc

Document Extractors の設定

クロールをする設定で、Available Locales の言語が 2 つ以上設定されている場合は、 Document Extractor の個別の Extractor を開くと、以下の画面のように Localized がデフォルトではオフになっています。

random desc

この項目をオンにして、クロールをする際のルールを多言語で利用できるように切り替えます。前回の記事では、URL を利用して ID で判別できるようにしましたが、今回は該当するロケールに関しては削除していきます。このため、以下のようにコードを追加します。

    // URL から id を作成する
    let url = request.url;
    let locales = ['/ja-jp/', '/de-de/', '/zh-cn/', '/da/'];
    for (idx in locales) url = url.replace(locales[idx], '/');
    let id = url.replaceAll('/', '_').replaceAll(':', '_').replaceAll('.', '_');

続いて Locale の取り扱いに関して追加の作業をします。

Locale Extractor の設定

上記の Localized のボタンを有効にした後、ソース設定の項目で Optional となっていた Locale Extractor の設定が To Do となって設定をする必要が出てきます。

random desc

どのロケールとしてコンテンツを認識するかをここで定義をします。以下にサンプルの JavaScript を記載しておきます。

function extract(request, response) {
    locales = ['zh-cn','de-de','ja-jp','da'];
     for (idx in locales) {
        locale = locales[idx];
        if (request.url.indexOf('/' + locale + '/') >= 0) {
            if (locale == 'da')
                locale = 'da-dk';
            return locale.toLowerCase().replace('-','_');
        }
    }
    return "en_us";
}

コードとしては locales の配列にマッチする場合に、ロケールのデータを指定するようにしています。指定している言語以外は、すべて en-us としています。なお、デンマーク語はロケールではなく言語となっているため、そこだけ if で処理をしてロケールに書き換えています。

結果は以下のようになります。

random desc

クロールに成功した後、コンテンツの一覧を参照すると ID が URL をベースにしているものに代わっているのを確認することができます。

random desc

動作確認

実際に各言語で検索をすることが可能か、Developer Resources の API Exporer を利用して検索して検証をします。

Locale を日本語にして、クエリを生成すると以下のコードが作成されます。

{
  "context": {
    "page": {
      "uri": "/"    },
    "locale": {
      "country": "jp",
      "language": "ja"
    }
  },
  "widget": {
    "items": [
      {
        "entity": "content",
        "rfk_id": "rfkid_7",
        "search": {
          "content": {},
          "query": {
            "keyphrase": "ヘッドレス"
          }
        }
      }
    ]
  }
}

実行すると、日本語のページが 10 ページほど結果として表示されます。言語を en-US に切り替えて、キーワードを Headless に変更をして実行すると、55 件の結果のうち 10 件が表示されています。

random desc

検索ページでの確認

以前に紹介している Sitecore Search の SDK でサイトを立ち上げている場合、検索ページの言語を切り替えると、同じ検索結果の他の言語のコンテンツを確認することができます。

random desc

まとめ

今回は Document Extractor の設定、および Locale Extractor の設定を利用して、言語毎に正しい結果が出るようにソースを作成した形です。より詳しい情報は以下のページで記載されているので、参考にしてください。