Как настроить ElasticPress для выдачи правильных результатов на каждом языке
Узнайте, как настроить многоязычный поиск на сайте WordPress, использующем WPML и ElasticPress. Плагин совместимости WPML ElasticPress создает отдельный индекс Elasticsearch для каждого языка на Вашем сайте, поэтому посетитель, выполняющий поиск во французской версии, получает результаты на французском языке — они никогда не смешиваются с английскими или японскими. На этой странице описаны настройка, синхронизация для каждого языка и, что самое важное, способы проверки того, что поиск возвращает правильные результаты на каждом языке.
В интеграции с ElasticPress нечего переводить. Плагин совместимости заставляет ElasticPress автоматически возвращать правильные для каждого языка результаты; Ваша задача — установить необходимые компоненты, запустить первоначальную синхронизацию и убедиться, что результаты выглядят правильно.
Перед началом работы
Установите и активируйте следующие плагины на одном сайте:
- ElasticPress. Бесплатный плагин с открытым исходным кодом от 10up, доступный на WordPress.org.
- Ядро WPML и WPML Перевод строк.
- WPML ElasticPress. Плагин совместимости. Скачайте его на странице загрузок Вашей учетной записи WPML.
Вам также понадобится конечная точка Elasticsearch: на собственном сервере или в виде управляемого сервиса, такого как ElasticPress.io, Elastic Cloud или AWS OpenSearch. Настройте ElasticPress для работы с Вашим хостом Elasticsearch и убедитесь, что он успешно выполняет индексацию на одноязычном сайте, прежде чем добавлять уровень WPML.
Настройте языки WPML перед запуском первой синхронизации.
Как работает индексация для каждого языка
WPML ElasticPress создает отдельный индекс Elasticsearch для каждого языка на Вашем сайте. Индекс каждого языка содержит:
- Переводы на этот язык для каждого переводимого типа записи.
- Записи на языке по умолчанию для любого типа записи, настроенного на возврат к языку по умолчанию при отсутствии перевода.
- Копии непереводимых записей. Индекс каждого языка включает их, чтобы они могли появляться в результатах поиска независимо от языка посетителя.
Каждый документ в языковом индексе анализируется на этом языке. Стоп-слова, стемминг, аббревиатуры, обработка множественного числа и времени зависят от конкретного языка. Именно поэтому французский поиск совпадает с французскими основами слов, а японский — с японской морфологией; без анализа для каждого языка поисковая система применяла бы правила одного языка к тексту на всех остальных языках.
Для поискового запроса каждого посетителя WPML ElasticPress направляет запрос в соответствующий языковой индекс. Пул результатов уже отфильтрован по нужному языку до начала ранжирования по релевантности.
Запуск первоначальной синхронизации
Когда четыре плагина активны, а конечная точка Elasticsearch настроена в ElasticPress, запустите первоначальную синхронизацию:
- Перейдите в ElasticPress > Sync в админ-панели WordPress.
- Нажмите Start Sync.
WPML ElasticPress запускает по одной синхронизации для каждого языка и создает индексы для каждого языка один за другим. На крупном сайте это может занять несколько часов; на странице отображается прогресс по мере выполнения синхронизации.
Если Вы обновляетесь с WPML ElasticPress 1.0 до 2.0 или более поздней версии, выполните переиндексацию. Формат индекса изменился, когда в версии 2.0 появились индексы для каждого языка.
После первоначальной синхронизации обновления контента автоматически попадают в нужный индекс. Всякий раз, когда Вы создаете, изменяете или удаляете запись, WPML ElasticPress обновляет соответствующий языковой индекс в фоновом режиме на основе языка этой записи или настроек перевода для ее типа записи.
Индексация определенных языков с помощью WP-CLI
Для крупных сайтов, запланированных заданий, сценариев развертывания или любых рабочих процессов, где использование пользовательского интерфейса админ-панели невозможно, WPML ElasticPress предоставляет команду WP-CLI (wp wpml_elasticpress sync), которая оборачивает собственную синхронизацию CLI ElasticPress и добавляет флаг --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 должен отображать другие записи только на том же языке.
- Пройдено. Каждая похожая запись ссылается на контент на том же языке, что и текущая страница.
- Не пройдено. Появляются похожие записи на других языках. Убедитесь, что функция Related Posts включена в ElasticPress > Features и что синхронизация языкового индекса для текущего языка завершена.
4. Поиск документов фильтруется по языку
Если в ElasticPress включена функция Documents: загрузите переведенный PDF-файл в версию записи на исходном языке, затем загрузите PDF-файл на другом языке в ее перевод. Выполните поиск фразы, которая встречается только в переведенном PDF-файле.
- Пройдено. Поиск с фронтенда на соответствующем языке возвращает правильный PDF-файл; поиск на исходном языке не возвращает переведенный PDF-файл, и наоборот.
- Не пройдено. В результатах появляются PDF-файлы на других языках. Выполните повторную синхронизацию после включения функции Documents. Команда
wp wpml_elasticpress sync --setupперестраивает каждый индекс с индексацией документов.
5. Поиск в бэкенде (термины, комментарии, пользователи) фильтруется по языку
Если Вы включили функции Terms, Comments или Users в ElasticPress > Features, выполните по ним поиск в админ-панели WordPress и убедитесь, что результаты фильтруются по текущему языку админ-панели. Это влияет на пользователей, выполняющих поиск в бэкенде многоязычного сайта.
6. Синхронизация мультисайта не очищает индексы соседних сайтов
Если Вы используете WPML и ElasticPress в сети мультисайтов, запустите синхронизацию индексов на одном сайте, а затем проверьте другие сайты в сети. Их индексы должны остаться нетронутыми.
- Пройдено. Индексация одного сайта оставляет индексы соседних сайтов нетронутыми.
- Не пройдено. Соседние индексы пусты. Остановитесь, повторно запустите синхронизацию на затронутых сайтах и сообщите о проблеме в поддержку WPML, чтобы они могли подтвердить, столкнулись ли Вы с уже известной проблемой мультисайтов или с новой.
Если все вышеперечисленные проверки пройдены, Ваш многоязычный поиск работает как задумано.
Поддерживаемые функции ElasticPress
В настоящее время WPML ElasticPress обеспечивает поддержку языков для следующих функций ElasticPress:
- Post Search. Поиск на фронтенде по записям, страницам и произвольным типам записей.
- Related Posts. Виджет похожих записей фильтрует совпадения по тому же языку.
- Documents. Поиск внутри прикрепленных PDF-файлов,
.docx,.pptxи файлов других типов. - Terms, Comments, and Users. Поиск в бэкенде.
Специфические для WooCommerce функции поиска ElasticPress (обнаружение товаров, фасетная фильтрация товаров, мгновенный поиск товаров по каталогам) в настоящее время не являются многоязычными. Многоязычная поддержка для поиска WooCommerce есть в планах WPML; пока она не появится, поиск WooCommerce на многоязычных сайтах осуществляется через стандартную обработку WooCommerce Multilingual от WPML, а не через ElasticPress.
Распространенные ошибки
- Синхронизация не была запущена после включения новой функции ElasticPress. Включение Documents или Related Posts в ElasticPress > Features не добавляет эти документы в индекс задним числом. Выполните повторную синхронизацию после переключения функций.
- Синхронизация WP-CLI без
--setupпосле серьезных изменений. Если Вы изменили переводимые типы записей, включенные функции или обновили WPML ElasticPress до новой основной версии, запуститеwp wpml_elasticpress sync --setup, чтобы перестроить каждый индекс с нуля. - Шаблон результатов поиска темы обходит фильтры ElasticPress. Некоторые пользовательские темы реализуют собственный запрос результатов поиска, который не проходит через ElasticPress. Если результаты выглядят неправильно только на фронтенде (и проходят проверки в админ-панели), возможно, шаблон темы нуждается в обновлении.
- Поиск товаров WooCommerce возвращает результаты на разных языках. Это не проблема синхронизации. Это упомянутый выше пробел в поддержке WooCommerce. На данный момент направляйте поиск товаров через стандартную обработку WooCommerce Multilingual.
- Текст документов не появляется в поиске. Убедитесь, что функция Documents включена в ElasticPress > Features и что после ее включения была выполнена синхронизация.
Автор: Amir · Последнее обновление: 2 июля 2026 года
Автор: Amir · Последнее обновление: 2 июля 2026