Как настроить 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, запустите первоначальную синхронизацию:
- Откройте ElasticPressSync в админ-панели 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. Поиск возвращает результаты на том же языке для каждого языка
Во фронтенде переключайте переключатель языков на каждый язык по очереди и ищите термин, который, как Вы знаете, существует в переведенном виде.
- Успешно. На странице результатов отображаются только записи на этом языке.
- Ошибка. Результаты на других языках появляются вместе с совпадениями на том же языке. Синхронизация для этого языка могла не завершиться — проверьте ElasticPressSync на наличие ошибок и повторно запустите команду WP-CLI для конкретного языка.
2. Контент только на исходном языке возвращает ноль результатов на других языках
Выберите запись, которая существует только на Вашем языке по умолчанию — без перевода на другие языки сайта. Из версии сайта не на языке по умолчанию найдите фразу из этой записи.
- Успешно. Ноль результатов. Запись не переведена на язык посетителя, поэтому она не должна появляться.
- Ошибка. Запись появляется в результатах. Обычно это означает, что тип записей настроен на возврат к языку по умолчанию в разделе WPMLНастройкиПеревод типов записей. Это настройка на уровне WPML, а не ошибка. Если Вы не планировали использовать возврат, измените настройку.
3. Похожие записи остаются на том же языке
Откройте переведенную запись во фронтенде. Виджет Related Posts должен отображать другие записи только на том же языке.
- Успешно. Каждая похожая запись ссылается на контент на том же языке, что и текущая страница.
- Ошибка. Появляются похожие записи на других языках. Убедитесь, что функция Related Posts включена в разделе ElasticPressFeatures, и что синхронизация языкового индекса для текущего языка завершена.
4. Поиск по документам фильтруется по языку
Если в ElasticPress включена функция Documents: загрузите переведенный PDF-файл в версию записи на исходном языке, затем загрузите PDF-файл на другом языке в её перевод. Выполните поиск по фразе, которая появляется только в переведенном PDF-файле.
- Успешно. Поиск из фронтенда на соответствующем языке возвращает нужный PDF-файл; поиск на исходном языке не возвращает переведенный PDF-файл, и наоборот.
- Ошибка. В результатах появляются PDF-файлы на других языках. Выполните повторную синхронизацию после включения функции Documents. Команда
wp wpml_elasticpress sync --setupперестраивает каждый индекс с учетом индексирования документов.
5. Поиск в бэкенде (термины, комментарии, пользователи) фильтруется по языку
Если Вы включили функции Terms, Comments или Users в разделе ElasticPressFeatures, выполните поиск по ним из админ-панели WordPress и убедитесь, что результаты фильтруются по текущему языку админ-панели. Это влияет на пользователей, выполняющих поиск в бэкенде многоязычного сайта.
6. Синхронизация мультисайта не очищает индексы соседних сайтов
Если Вы используете WPML и ElasticPress в сети мультисайтов, запустите синхронизацию индексов на одном сайте, а затем проверьте другие сайты в сети. Их индексы должны остаться нетронутыми.
- Успешно. Индексирование одного сайта оставляет индексы соседних сайтов нетронутыми.
- Ошибка. Соседние индексы пусты. Остановитесь, повторно запустите синхронизацию на затронутых сайтах и сообщите о проблеме в службу поддержки WPML, чтобы они могли подтвердить, столкнулись ли Вы с уже известной проблемой мультисайта или с новой.
Если все вышеперечисленные проверки прошли успешно, Ваш многоязычный поиск работает так, как задумано.
Поддерживаемые функции ElasticPress
В настоящее время WPML ElasticPress делает следующие функции ElasticPress зависимыми от языка:
- Post Search. Поиск во фронтенде по записям, страницам и произвольным типам записей.
- Related Posts. Виджет похожих записей фильтрует совпадения на том же языке.
- Documents. Поиск внутри прикрепленных PDF-файлов,
.docx,.pptxи файлов других типов. - Terms, Comments, and Users. Поиск в бэкенде.
Функции поиска ElasticPress, специфичные для WooCommerce (обнаружение товаров, фасетная фильтрация товаров, мгновенный поиск товаров по каталогам), в настоящее время не являются многоязычными. Поддержка многоязычности для поиска WooCommerce находится в планах развития WPML; пока она не появится, поиск WooCommerce на многоязычных сайтах осуществляется через стандартную обработку WooCommerce Multilingual, а не через ElasticPress.
Распространенные ошибки
- Синхронизация не была запущена после включения новой функции ElasticPress. Включение Documents или Related Posts в разделе ElasticPressFeatures не добавляет эти документы в индекс задним числом. Выполните повторную синхронизацию после переключения функций.
- Синхронизация WP-CLI без
--setupпосле серьезных изменений. Если Вы изменили, какие типы записей являются переводимыми, какие функции включены, или обновили WPML ElasticPress до новой основной версии, запуститеwp wpml_elasticpress sync --setup, чтобы перестроить каждый индекс с нуля. - Шаблон результатов поиска темы обходит фильтры ElasticPress. Некоторые пользовательские темы реализуют собственный запрос результатов поиска, который не проходит через ElasticPress. Если результаты выглядят неправильно только во фронтенде (и проходят проверки в админ-панели), возможно, шаблон темы нуждается в обновлении.
- Поиск товаров WooCommerce возвращает результаты на разных языках. Это не проблема синхронизации. Это пробел в поддержке WooCommerce, описанный выше. На данный момент направляйте поиск товаров через стандартную обработку WooCommerce Multilingual.
- Текст документов не появляется в поиске. Убедитесь, что функция Documents включена в разделе ElasticPressFeatures, и что после ее включения была запущена синхронизация.