WPML

ElasticPress統合では翻訳するものは何もありません。互換性プラグインにより、ElasticPressは自動的に言語的に正しい結果を返します。必要な作業は、各コンポーネントをインストールし、初期同期を実行して、結果が正しく表示されるか確認することだけです。

はじめに

同じサイトに以下のプラグインをインストールして有効化します。

また、セルフホスト、またはElasticPress.io (新しいタブで開く)、Elastic Cloud、AWS OpenSearchなどのマネージドサービスによるElasticsearchエンドポイントも必要です。Elasticsearchホストに対してElasticPressを設定し、WPMLレイヤーを追加する前に、単一言語サイトでインデックス作成が正常に完了することを確認してください。

最初の同期を実行する前に、WPMLの言語を設定してください。

言語ごとのインデックス作成の仕組み

WPML ElasticPressは、サイトの言語ごとに個別のElasticsearchインデックスを作成します。各言語のインデックスには以下が含まれます。

  • すべての翻訳可能な投稿タイプのその言語への翻訳。
  • 翻訳が存在しない場合にデフォルト言語にフォールバックするように設定されている投稿タイプのデフォルト言語の投稿。
  • 翻訳不可の投稿のコピー。訪問者の言語に関係なく検索結果に表示されるように、すべての言語のインデックスに含まれます。

言語インデックス内のすべてのドキュメントは、その言語で分析されます。ストップワード、ステミング、略語、複数形、時制の処理はすべて言語固有です。これにより、フランス語の検索はフランス語の語幹に一致し、日本語の検索は日本語の形態素に一致します。言語ごとの分析がない場合、検索エンジンはある1つの言語のルールを他のすべての言語のテキストに適用してしまいます。

各訪問者の検索に対して、WPML ElasticPressはクエリを一致する言語インデックスにルーティングします。関連性のランク付けが開始される前に、結果プールはすでに正しい言語にフィルタリングされています。

初期同期の実行

4つのプラグインを有効にし、ElasticPressでElasticsearchエンドポイントを設定した状態で、初期同期を実行します。

  1. WordPress管理画面でElasticPressSyncを開きます。
  2. 「Start Sync」をクリックします。

WPML ElasticPressは言語ごとに1つの同期をトリガーし、言語ごとのインデックスを順番に構築します。大規模なサイトでは数時間かかる場合があります。同期の実行中、ページに進行状況が報告されます。

WPML ElasticPress 1.0から2.0以降にアップデートする場合は、インデックスを再作成してください。バージョン2.0で言語ごとのインデックスが導入された際に、インデックスのフォーマットが変更されました。

初期同期後、コンテンツの更新は自動的に適切なインデックスに反映されます。投稿を作成、変更、または削除するたびに、WPML ElasticPressはその投稿の言語または投稿タイプの翻訳設定に基づいて、対応する言語インデックスをバックグラウンドで更新します。

WP-CLIを使用した特定の言語のインデックス作成

大規模なサイト、スケジュールされたジョブ、デプロイメントスクリプト、または管理画面UIを使用できないワークフロー向けに、WPML ElasticPressは、ElasticPress独自のCLI同期をラップし、言語選択用の--post-langフラグを追加したWP-CLIコマンド(wp wpml_elasticpress sync)を提供しています。

英語の投稿のみの初期同期を実行する:

wp wpml_elasticpress sync --setup --post-type=post --post-lang=en

--setupフラグは、再構築する前に既存のインデックスをクリアします。このコマンドの実行後、英語の検索では英語の結果が返されます。他の言語からの検索では、インデックスがまだ構築されていないため、何も返されません。

既存のインデックスをクリアせずに2つ目の言語を追加する:

wp wpml_elasticpress sync --post-type=post --post-lang=fr

追加する言語ごとに繰り返します。以前にインデックス作成された言語をそのまま維持するため、--setupは省略します。

1回の実行で複数の言語を同期する:

wp wpml_elasticpress sync --post-lang=en,es

メモリが不足している場合にバッチサイズを調整する:

wp wpml_elasticpress sync --per-page=200

デフォルトのバッチサイズは350です。これを下げることで、メモリが制限されたサーバーで役立ちます。

すべてのインデックスを最初から再構築する:

wp wpml_elasticpress sync --setup

これにより、すべての言語インデックスがクリアされ、すべて再構築されます。すべての言語で何かがおかしい場合や、メジャーアップグレードの後にこれを使用します。

ElasticPressの検索が正しい言語のコンテンツを返すか確認する方法

技術的な同期は簡単です。このページの価値は検証にあります。初期同期が完了した後、および検索の動作に影響を与えるコンテンツや設定を変更した場合は、必ずこれらのチェックを実行してください。

1. 各言語からの検索で同じ言語の結果が返される

フロントエンドから、言語スイッチャーを各言語に順番に切り替え、翻訳された形で存在することがわかっている用語を検索します。

  • 成功:結果ページには、その言語の投稿のみがリストされます。
  • 失敗:同じ言語の一致とともに、他の言語の結果が表示されます。その言語の同期が完了していない可能性があります。ElasticPressSyncでエラーを確認し、言語固有のWP-CLIコマンドを再実行してください。

2. 翻訳元言語のみのコンテンツは他の言語でゼロ件の結果を返す

デフォルト言語にのみ存在し、サイト上の他の言語への翻訳がない投稿を選択します。サイトのデフォルト言語以外のバージョンから、その投稿のフレーズを検索します。

  • 成功:結果はゼロ件です。投稿は訪問者の言語に翻訳されていないため、表示されないはずです。
  • 失敗:投稿が結果に表示されます。これは通常、WPML設定投稿タイプの翻訳で、投稿タイプがデフォルト言語にフォールバックするように設定されていることを意味します。これはWPMLレベルの設定であり、バグではありません。フォールバックを意図していなかった場合は、設定を変更してください。

フロントエンドで翻訳された投稿を開きます。「Related Posts」ウィジェットには、同じ言語の他の投稿のみがリストされるはずです。

  • 成功:すべての関連記事が、現在のページと同じ言語のコンテンツにリンクしています。
  • 失敗:他の言語の関連記事が表示されます。ElasticPressFeaturesで「Related Posts」機能が有効になっていること、および現在の言語の言語インデックスの同期が完了していることを確認してください。

ElasticPressで「Documents」機能が有効になっている場合:投稿の翻訳元言語バージョンに翻訳されたPDFをアップロードし、その翻訳に別の言語のPDFをアップロードします。翻訳されたPDFにのみ表示されるフレーズを検索します。

  • 成功:一致する言語のフロントエンドからの検索では正しいPDFが返されます。翻訳元言語の検索では翻訳されたPDFは返されず、その逆も同様です。
  • 失敗:他の言語のPDFが結果に表示されます。Documents機能を有効にした後、再同期してください。wp wpml_elasticpress sync --setupコマンドは、ドキュメントのインデックス作成を使用してすべてのインデックスを再構築します。

5. バックエンド検索(用語、コメント、ユーザー)が言語でフィルタリングされる

ElasticPressFeaturesで「Terms」、「Comments」、または「Users」機能を有効にしている場合、WordPress管理画面からそれらを検索し、結果が現在の管理画面の言語でフィルタリングされることを確認します。これは、多言語サイトのバックエンドを検索するユーザーに影響します。

6. マルチサイト同期が兄弟サイトのインデックスをクリアしない

マルチサイトネットワークでWPMLとElasticPressを実行している場合、1つのサイトでインデックス同期を実行してから、ネットワーク内の他のサイトを確認します。それらのインデックスはそのまま維持されているはずです。

  • 成功:1つのサイトのインデックスを作成しても、兄弟サイトのインデックスは変更されません。
  • 失敗:兄弟インデックスが空です。作業を停止し、影響を受けるサイトで同期を再実行して、WPMLサポートに問題を報告してください。これにより、過去のマルチサイトの問題に直面しているのか、新しい問題なのかを確認できます。

上記のすべてのチェックに合格した場合、多言語検索は設計どおりに機能しています。

サポートされているElasticPressの機能

WPML ElasticPressは現在、以下のElasticPress機能を言語に対応させています。

  • Post Search:投稿、ページ、カスタム投稿タイプ全体にわたるフロントエンド検索。
  • Related Posts:関連記事ウィジェットは、同じ言語の一致にフィルタリングします。
  • Documents:添付されたPDF、.docx、.pptx、およびその他のファイルタイプ内の検索。
  • Terms, Comments, and Users:バックエンド検索。

ElasticPressのWooCommerce固有の検索機能(商品の発見、ファセット商品フィルタリング、カタログ全体のインスタント商品検索)は、現在多言語対応していません。WooCommerce検索の多言語対応はWPMLのロードマップにあります。それが実現するまで、多言語サイトでのWooCommerce検索はElasticPressではなく、WPMLの標準的なWooCommerce Multilingualの処理を通じて行われます。

よくある落とし穴

  • 新しいElasticPress機能を有効にした後に同期が実行されなかった。ElasticPressFeaturesで「Documents」や「Related Posts」を有効にしても、それらのドキュメントが遡ってインデックスに追加されることはありません。機能を切り替えた後に再同期してください。
  • 大きな変更の後に--setupなしでWP-CLI同期を実行した。翻訳可能な投稿タイプを変更した場合、有効にする機能を変更した場合、またはメジャーバージョンの境界を越えてWPML ElasticPressをアップグレードした場合は、wp wpml_elasticpress sync --setupを実行してすべてのインデックスを最初から再構築してください。
  • テーマの検索結果テンプレートがElasticPressのフィルターをバイパスしている。一部のカスタムテーマは、ElasticPressを経由しない独自の検索結果クエリを実装しています。フロントエンドでのみ結果がおかしく(管理画面のチェックには合格する)場合、テーマテンプレートの更新が必要になることがあります。
  • WooCommerceの商品検索で言語が混在した結果が返される。これは同期の問題ではありません。上記のWooCommerceカバレッジのギャップによるものです。現在のところ、商品検索はWooCommerce Multilingualの標準的な処理にルーティングしてください。
  • ドキュメントのテキストが検索に表示されない。ElasticPressFeaturesでDocuments機能が有効になっていること、および有効にしてから同期が実行されたことを確認してください。

執筆者:Amir

執筆者:Amir