如何让 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 索引。每种语言的索引包含:
- 每个可翻译文章类型的该语言翻译。
- 当不存在翻译时,设置为回退到默认语言的任何文章类型的默认语言文章。
- 不可翻译文章的副本。每种语言的索引都包含这些副本,因此无论访问者使用哪种语言,它们都会出现在搜索结果中。
语言索引中的每个文档都会使用该语言进行分析。停用词、词干提取、缩写、复数和时态处理都是特定于语言的。这就是为什么法语搜索匹配法语词干,而日语搜索匹配日语形态的原因;如果没有按语言分析,搜索引擎会将一种语言的规则应用于所有其他语言的文本。
对于每位访问者的搜索,WPML ElasticPress 会将查询路由到匹配的语言索引。在开始相关性排名之前,结果池已经被筛选为正确的语言。
运行初始同步
在激活这四个插件并在 ElasticPress 中配置了 Elasticsearch 端点后,运行初始同步:
- 在 WordPress 管理后台中打开 ElasticPress > Sync。
- 单击 Start Sync。
WPML ElasticPress 会为每种语言触发一次同步,并依次构建按语言索引。在大型网站上,这可能需要几个小时;页面会在同步运行时报告进度。
如果您要从 WPML ElasticPress 1.0 更新到 2.0 或更高版本,请重新建立索引。当 2.0 版本引入按语言索引时,索引格式发生了变化。
初始同步后,内容更新会自动流入正确的索引。每当您创建、修改或删除文章时,WPML ElasticPress 都会根据该文章的语言或其文章类型的翻译设置在后台更新相应的语言索引。
使用 WP-CLI 为特定语言建立索引
对于大型网站、计划任务、部署脚本或任何无法使用管理后台 UI 的工作流,WPML ElasticPress 提供了一个 WP-CLI 命令(wp wpml_elasticpress sync),该命令封装了 ElasticPress 自己的 CLI 同步,并添加了用于语言选择的 --post-lang 标志。
仅为英语文章运行初始同步:
wp wpml_elasticpress sync --setup --post-type=post --post-lang=en
--setup 标志会在重建之前清除现有索引。执行此命令后,英语搜索将返回英语结果;其他语言的搜索不返回任何内容,因为它们的索引尚未构建。
添加第二种语言而不清除现有索引:
wp wpml_elasticpress sync --post-type=post --post-lang=fr
对每种其他语言重复此操作。省略 --setup,以便保留以前索引的语言。
在一次运行中同步多种语言:
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. 仅源语言内容在其他语言中返回零结果
选择一篇仅在您的默认语言中存在的文章,该文章在网站上的其他语言中没有翻译。从网站的非默认语言版本中,搜索该文章中的短语。
- 通过。零结果。该文章未翻译为访问者的语言,因此不应出现。
- 失败。该文章出现在结果中。这通常意味着在 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,请在一个站点上运行索引同步,然后检查网络中的其他站点。它们的索引应仍然完好无损。
- 通过。为一个站点建立索引不会影响同级站点的索引。
- 失败。同级索引为空。请停止操作,在受影响的站点上重新运行同步,并将问题报告给 WPML 支持,以便他们确认您遇到的是历史多站点问题还是新问题。
如果上述所有检查均通过,则您的多语言搜索正在按预期工作。
支持的 ElasticPress 功能
WPML ElasticPress 目前使以下 ElasticPress 功能具有语言感知能力:
- Post Search。跨文章、页面和自定义文章类型的前端搜索。
- Related Posts。相关文章小工具会筛选出同语言匹配项。
- Documents。在附加的 PDF、
.docx、.pptx和其他文件类型中进行搜索。 - Terms、Comments 和 Users。后台搜索。
ElasticPress 针对 WooCommerce 的特定搜索功能(产品发现、分面产品筛选、跨目录的即时产品搜索)目前不支持多语言。WooCommerce 搜索的多语言覆盖已在 WPML 的路线图上;在此功能上线之前,多语言网站上的 WooCommerce 搜索将通过 WPML 的标准 WooCommerce Multilingual 处理机制进行,而不是通过 ElasticPress。
常见陷阱
- 启用新的 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日