Блоги

Навигационные полоски

Liferay 7 Remote ElasticSearch
Liferay 7 Remote ElasticSearch

Сначала немного предыстории. В Liferay 6 для реализации индексации и поиска информации использовался встроенный поисковый движок Lucene. Однако, как и многие модули в Liferay, поисковая подсистема была реализована через унифицированный API и это позволяло реализовывать работу через другие поисковые движки. В частности, для ситуаций когда поисковую функциональность требовалось "вынести" из Liferay (например в кластерной конфигурации), можно было использовать Solr.

В Liferay 7/DXP таким поисковым движком "по умолчанию" стал ElasticSearch - и это хорошо, так как теперь и для простых конфигураций (когда все работает в одном сервере) и для сложных (установка кластера) можно использовать один и тот же функционал.

Итак, изначально Liferay запускает ElasticSearch в "локальном" режиме - в этом случае ElasticSearch запускается внутри самого портала. Данная функциональность не рекомендуется (а для DXP является и не поддерживаемой официально) для установки в Production по ряду причин:

  • это и то, что ElasticSearch в этом случае работает в той же JVM что и сам портал и может нарушить его работу,
  • и то, что такую конфигурацию нельзя использовать при построении кластера,
  • и что по уму сам ElasticSearch неплохо бы кластеризовать.

Итак - давайте рассмотрим что надо сделать для того, чтобы настроить портал Liferay для работы с удаленным ElasticSearch.

Предполагается - что у вас уже стоит Liferay 7.0.4 GA5 (рассматривать будем эту версию) и он использует "встроенный" ElasticSearch по умолчанию.

Установка и настройка ElasticSearch

Рассмотрим простейшую минимальную установку ElasticSearch (вопрос кластеризации и тонких настроек ElasticSearch - тема отдельной, большой статьи).

Нам потребуется ElasticSearch 2.4.x (взять можно тут - https://www.elastic.co/downloads/past-releases). На текущий момент последней версией является 2.4.6 (доступна для скачивания тут - https://www.elastic.co/downloads/past-releases/elasticsearch-2-4-6). 2.4 - это самая старшая версия ElasticSearch которая официально поддерживается текущей версией Liferay 7.0.4 (может и с 5.x и c 6.x будет работать - честно - не проверял).

Скачиваем архив, разворачиваем.

Для настройки нам надо отредактировать файл <elastichome>/config/elasticsearch.yml и вписать

cluster.name: LiferayElasticsearchCluster

Это имя кластера ElasticSearch по которому к нему потом будет обращаться портал.

Так же потребуется поставить два обязательных плагина, для этого в папке <elastichome>/bin запускаем две команды:

# ./plugin install analysis-smartcn
# ./plugin install analysis-kuromoji

(этот момент с плагинами кстати пропущен в официальной документации)

Все, можно запускать ElasticSearch (команда ./elasticsearch в папке bin). Логи смотрим в папке logs.

Настройка портала Liferay для работы с удаленным ElasticSearch

Останавливаем портал и создаем файл <liferayhome>/osgi/configs/com.liferay.portal.search.elasticsearch.configuration.ElasticsearchConfiguration.config с содержимым:

operationMode="REMOTE"
# If running Elasticsearch from a different computer:
#transportAddresses="ip.of.elasticsearch.node:9300"
# Highly recommended for all non-prodcution usage (e.g., practice, tests, diagnostics):
#logExceptionsOnly="false"

В случае если вы развернули ElasticSearch на той же машине что и сам портал - больше ничего править не надо, если же вы развернули его на другом сервере - то надо раскомментировать transportAddresses и прописать там корректный IP и порт.

Рестартуем портал и после рестарта необходимо выполнить реиндекс всех объектов (Control Panel -> Configuration -> Server Administration -> Reindex all search indexes).

Через некоторое время можно тестировать - поиск по объектам должен работать как и раньше со встроенным движком.

 

11.12.2017