言語ごとに正しい結果を返すようにElasticPressを設定する方法
WPMLとElasticPressを実行しているWordPressサイトで多言語検索をセットアップする方法を説明します。WPML ElasticPress互換性プラグインは、サイトの言語ごとに個別のElasticsearchインデックスを構築するため、フランス語版から検索する訪問者にはフランス語の結果が表示され、英語や日本語の結果が混ざることはありません。このページでは、セットアップ、言語ごとの同期、そして最も重要な点として、検索がすべての言語で正しい結果を返すことを確認する方法について説明します。
ElasticPress統合に翻訳するものはありません。互換性プラグインにより、ElasticPressは自動的に言語的に正しい結果を返します。必要な作業は、各コンポーネントをインストールし、最初の同期を実行して、結果が正しく表示されるか確認することだけです。
開始する前に
同じサイトに以下のプラグインをインストールして有効化します。
- ElasticPress。10upが提供する無料のオープンソースプラグインで、WordPress.orgから入手できます。
- WPMLコアおよびWPML 文字列翻訳。
- WPML ElasticPress。互換性プラグインです。WPMLアカウントのダウンロードページからダウンロードしてください。
また、Elasticsearchエンドポイント(セルフホスト、またはElasticPress.io、Elastic Cloud、AWS OpenSearchなどのマネージドサービス)も必要です。WPMLレイヤーを追加する前に、Elasticsearchホストに対してElasticPressを設定し、単一言語のサイトで正常にインデックスが作成されることを確認してください。
最初の同期を実行する前に、WPMLの言語を設定してください。
言語ごとのインデックス作成の仕組み
WPML ElasticPressは、サイトの言語ごとに個別のElasticsearchインデックスを作成します。各言語のインデックスには以下が含まれます。
- すべての翻訳可能な投稿タイプのその言語への翻訳。
- 翻訳が存在しない場合にデフォルト言語にフォールバックするように設定されている投稿タイプのデフォルト言語の投稿。
- 翻訳不可の投稿のコピー。訪問者の言語に関係なく検索結果に表示されるように、すべての言語のインデックスにこれらが含まれます。
言語インデックス内のすべてのドキュメントは、その言語で分析されます。ストップワード、ステミング、略語、複数形、時制の処理はすべて言語固有です。これにより、フランス語の検索はフランス語の語幹に一致し、日本語の検索は日本語の形態素に一致します。言語ごとの分析がない場合、検索エンジンはある1つの言語のルールを他のすべての言語のテキストに適用してしまいます。
訪問者の検索ごとに、WPML ElasticPressはクエリを一致する言語インデックスにルーティングします。関連性のランキングが開始される前に、結果のプールはすでに正しい言語にフィルタリングされています。
最初の同期の実行
4つのプラグインを有効にし、ElasticPressでElasticsearchエンドポイントを設定した状態で、最初の同期を実行します。
- WordPress管理画面でElasticPress > Syncを開きます。
- Start Syncをクリックします。
WPML ElasticPressは言語ごとに同期をトリガーし、言語ごとのインデックスを順番に構築します。大規模なサイトでは数時間かかる場合があります。同期の実行中、ページに進捗状況が表示されます。
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. 検索が各言語から同じ言語の結果を返す
フロントエンドから、言語スイッチャーを各言語に順番に切り替え、翻訳された形で存在することがわかっている用語を検索します。
- 成功:結果ページには、その言語の投稿のみがリストされます。
- 失敗:同じ言語の一致結果と一緒に、他の言語の結果が表示されます。その言語の同期が完了していない可能性があります。ElasticPress > Syncでエラーを確認し、言語固有のWP-CLIコマンドを再実行してください。
2. 翻訳元言語のみのコンテンツが他の言語でゼロ件の結果を返す
デフォルト言語でのみ存在し、サイト上の他の言語への翻訳がない投稿を1つ選びます。デフォルト言語以外のバージョンのサイトから、その投稿に含まれるフレーズを検索します。
- 成功:結果がゼロ件になります。投稿は訪問者の言語に翻訳されていないため、表示されないはずです。
- 失敗:投稿が結果に表示されます。これは通常、WPML > 設定 > 投稿タイプの翻訳で、投稿タイプがデフォルト言語にフォールバックするように設定されていることを意味します。これはWPMLレベルの設定であり、バグではありません。フォールバックを意図していない場合は、設定を変更してください。
3. 関連記事が同じ言語のままになる
フロントエンドで翻訳された投稿を開きます。Related Postsウィジェットには、同じ言語の他の投稿のみがリストされるはずです。
- 成功:すべての関連記事が、現在のページと同じ言語のコンテンツにリンクしています。
- 失敗:他の言語の関連記事が表示されます。ElasticPress > FeaturesでRelated Posts機能が有効になっていること、および現在の言語の言語インデックスの同期が完了していることを確認してください。
4. ドキュメント検索が言語でフィルタリングされる
ElasticPressでDocuments機能が有効になっている場合:投稿の翻訳元言語のバージョンに翻訳されたPDFをアップロードし、次にその翻訳に異なる言語のPDFをアップロードします。翻訳されたPDFにのみ表示されるフレーズを検索します。
- 成功:一致する言語のフロントエンドからの検索では正しいPDFが返されます。翻訳元言語の検索では翻訳されたPDFは返されず、その逆も同様です。
- 失敗:他の言語のPDFが結果に表示されます。Documentsを有効にした後に再同期してください。
wp wpml_elasticpress sync --setupコマンドは、ドキュメントのインデックス作成を含めてすべてのインデックスを再構築します。
5. バックエンド検索(用語、コメント、ユーザー)が言語でフィルタリングされる
ElasticPress > FeaturesでTerms、Comments、またはUsers機能を有効にしている場合は、WordPress管理画面からそれらを検索し、現在の管理言語で結果がフィルタリングされることを確認します。これは、多言語サイトのバックエンドを検索するユーザーに影響します。
6. マルチサイトの同期が兄弟サイトのインデックスをクリアしない
マルチサイトネットワークでWPMLとElasticPressを実行している場合は、1つのサイトでインデックスの同期を実行してから、ネットワーク内の他のサイトを確認します。それらのインデックスはそのまま残っているはずです。
- 成功:1つのサイトのインデックスを作成しても、兄弟サイトのインデックスは影響を受けません。
- 失敗:兄弟インデックスが空になります。作業を停止し、影響を受けるサイトで同期を再実行して、WPMLサポートに問題を報告してください。これにより、過去のマルチサイトの問題に該当するのか、新しい問題なのかを確認できます。
上記のすべてのチェックに合格した場合、多言語検索は設計どおりに機能しています。
サポートされているElasticPressの機能
WPML ElasticPressは現在、以下のElasticPress機能を言語対応にしています。
- Post Search:投稿、ページ、カスタム投稿タイプにわたるフロントエンド検索。
- Related Posts:関連記事ウィジェットが同じ言語の一致にフィルタリングされます。
- Documents:添付されたPDF、
.docx、.pptx、およびその他のファイルタイプ内の検索。 - Terms、Comments、Users:バックエンド検索。
ElasticPressのWooCommerce固有の検索機能(製品の発見、ファセット化された製品フィルタリング、カタログ全体のインスタント製品検索)は、現在多言語対応していません。WooCommerce検索の多言語対応はWPMLのロードマップにあります。それが実現するまで、多言語サイトでのWooCommerce検索はElasticPressではなく、WPMLの標準のWooCommerce Multilingualの処理を通じて行われます。
よくある落とし穴
- 新しいElasticPress機能を有効にした後に同期が実行されていない。ElasticPress > FeaturesでDocumentsまたはRelated Postsを有効にしても、それらのドキュメントがさかのぼってインデックスに追加されるわけではありません。機能を切り替えた後に再同期してください。
- 大きな変更の後の
--setupなしでのWP-CLI同期。翻訳可能な投稿タイプを変更した場合、有効になっている機能を変更した場合、またはWPML ElasticPressをメジャーバージョンの境界を越えてアップグレードした場合は、wp wpml_elasticpress sync --setupを実行してすべてのインデックスをゼロから再構築してください。 - テーマの検索結果テンプレートがElasticPressのフィルターをバイパスしている。一部のカスタムテーマは、ElasticPressを経由しない独自の検索結果クエリを実装しています。フロントエンドでのみ結果がおかしく見える場合(管理画面のチェックには合格する場合)、テーマテンプレートの更新が必要になることがあります。
- WooCommerceの製品検索で言語が混在した結果が返される。これは同期の問題ではありません。上記のWooCommerceの対応範囲のギャップによるものです。当面の間、製品検索はWooCommerce Multilingualの標準の処理にルーティングしてください。
- Documentsのテキストが検索に表示されない。ElasticPress > FeaturesでDocuments機能が有効になっていること、および有効にしてから同期が実行されたことを確認してください。
執筆者:Amir · 最終更新日:2026年7月2日
執筆者:Amir · 最終更新日:2026年7月2日