先日、JDKの対応バージョンを確認するため、Compatibility Matrixを確認するタイミングがありました。
https://help.liferay.com/hc/en-us/articles/36985516566797-Liferay-DXP-2025-Q2-Compatibility-Matrix
Javaの対応バージョンを確認するために見に行っただけでしたが、ふと目に入ったこの部分

えっ、なんか増えてる!誰っ
長らくElasticsearch、Solrの2つだけが並んでいたこのセクションに見知らぬキャラが追加されていたので衝撃を受けました。
いま冷静に「あ、ES7系Deprecatedになってるんや・・・」ってこれを書いてて気づいた程度には衝撃でした。
OpenSearchとは
新キャラが増えてたことに衝撃を受けただけで、OpenSearchが何なのかについては全く知りませんでした。
AWSのページにOpenSearchの概要説明のページがあります。
https://aws.amazon.com/jp/what-is/opensearch
どうやら
- Elasticsearchがいつかのバージョンからオープンソースじゃなくなった
- ソフトウェアのソースがオープンじゃないのは嫌だ
- オープンじゃないElasticとはもう袂を分かつしか・・・
みたいな流れで生まれたのがOpenSearchの様です。
2021年頃らしいので意外と結構前
Elasticsearchがオープンソースだった最後のバージョンからフォークました。
AWSにElasticsearchのサービスがあったけどそちらもOpenSearchに移行しているとのこと。
基本的にElasticsearchとは別のプロジェクトとして機能追加したりするのでElasticsearchとの互換性などは維持しませんが、
Elasticsearch側にいい感じの機能が追加されるとそれを取り込むこともある(逆も然り)でしょうということで、敵対関係というよりは別の道を歩んで共に進化していきましょうよ、というスタンスなんでしょう。
OpenSearchのSが大文字なのはElasticsearchとの違いを表してるんですかね。
ESのテンションでOpenSearchを略すとOSになるのはいろんなところで事故りそう・・・
OpenSearchのインストール
現時点ではBETA版のプラグインではありますが、Liferay社がOpenSearchのインストール手順のページを用意してくれていました。こちらを参考にインストールを進めていきます。
https://learn.liferay.com/ja/w/dxp/search/installing-and-upgrading-a-search-engine/opensearch/installing-opensearch
1. OpenSearchのインストール
OpenSearchの動作環境を見ると「Windows Server 2019」と書いてました。
https://docs.opensearch.org/2.16/install-and-configure/os-comp
Serverじゃないからな・・・と思いDockerを使うことにしました。
別にOSがWindows Serverじゃなくてもインストールしたら普通に動くのかもしれません。
実際ElasticsearchはサーバーOSじゃなくても動いてますし。
Dockerのイメージを取得します。
Compatibility Matrixによると2.12 ~ 2.16が対応しているバージョンです。
今回は対応バージョンの最新である2.16を使用してみました。
docker pull opensearchproject/opensearch:2.16.0
起動にあたって、vm.max_map_countの値を変更する必要があるみたいです。
Elasticsearchの際にもこんな設定を入れたような気がします。
コマンドを使用して値を変更します。
wsl -d docker-desktop
sysctl -w vm.max_map_count=262144
設定が完了したのでとりあえずポートをそのまま設定して起動してみます。
Environment Variablesで
「discovery.type」を追加し、値に「single-node」を入力
「OPENSEARCH_INITIAL_ADMIN_PASSWORD」を追加し、パスワードを設定します。

起動するとエラーが発生

どうやらパスワードの強さが足りないよう
8文字以上、最低1つの大文字、最低1つの小文字、最低1つの数字、最低1つの特殊記号が必要だそうです
無駄にそこらのWebサービスより厳しいパスワードポリシー・・・
パスワードを変えて起動しなおすと
色々出力されていますが、何かがfinishedになってログが止まったので恐らく起動が完了

curlでリクエストを投げてみると、エラーっぽい。

Docker側に色々出ています。

どうやらセキュリティ関連で何かダメっぽい。
OpenSearchはデフォルトでセキュリティ系の機能がオンになっていて、証明書を発行したりインストールしたりなどの設定が必要になるみたいです。
とりあえずローカルの端末で試してみたいだけなので
一旦オフに切り替えるためopensearch.ymlに以下を追記します。
plugins.security.disabled: true
再起動して再びcurlを実行

それらしいレスポンスが見れました。
Liferay関係なく、OpenSearchをローカルで試したいだけならこの状態で色々試せるんじゃないでしょうか。
後々見返してみると、curlを実行したときのセキュリティ周りでエラーが出ていたのはユーザーとパスワードを指定していないからかも。
とりあえずOpenSearchさんは動くようになったようです。めでたし。
Powershellのcurlの余談
Powershellのcurlって「curl [URL]」みたいな感じで実行すると実際には「Invoke-WebRequest [URL]」と実行したときと同じコマンドが動いているらしいです。
なのでオプションの指定はInvoke-WebRequestのオプションの書式に則らないといけないとか。
「curl.exe [URL]」と.exe付きで実行するとUNIXのcurl互換のコマンドが動くのでオプション指定もcurlと同じ感じで指定できるようになるみたいですよ。逆の方が直感的で使いやすそうなのに。
2. プラグインのダウンロード
Elasticsearch用のプラグインはデフォルトでインストール済みですが、OpenSearch用のプラグインは別途で取得する必要があります。
マーケットプレイスからOpenSearch用のプラグインをダウンロードします。
https://marketplace.liferay.com


購入してからプラグインをダウロードできるようになるまで1日~2日程度かかりました。
ダウンロード可能になるとダッシュボードに表示されます。

「Download App」を押すと.lpkgファイルがダウンロードされます。
lpkgファイルを解凍すると同じくlpkgファイルが2つ出てくるので、それも解凍するとjarファイルが解凍されます。

3. 各種設定
OpenSearch
opensearch.ymlに以下の変更を行います。
cluster.name: LiferayOpenSearchCluster
次に、OpenSearchのプラグインをインストールします。
./bin/opensearch-plugin install analysis-icu analysis-kuromoji analysis-smartcn analysis-stempel
なんだか見知ったプラグイン群ですね。
再起動して設定を反映させます。
Liferay
2.でダウンロード、解凍して出てきたjarファイルをosgi/modules配下に配置します。
モジュールの設定のため以下のファイルをosgi/configs配下に作成します。
- com.liferay.portal.bundle.blacklist.internal.configuration.BundleBlacklistConfiguration.config
デフォルトでインストールされているElasticsearch用のプラグインを無効化する必要があります。
以下を追記してESのプラグインを無効にします。
blacklistBundleSymbolicNames=[\
"com.liferay.portal.search.elasticsearch.cross.cluster.replication.impl",\
"com.liferay.portal.search.elasticsearch.monitoring.web",\
"com.liferay.portal.search.elasticsearch7.api",\
"com.liferay.portal.search.elasticsearch7.impl",\
"com.liferay.portal.search.learning.to.rank.api",\
"com.liferay.portal.search.learning.to.rank.impl"\
]
- com.liferay.portal.search.opensearch2.configuration.OpenSearchConfiguration.config
OpenSearch用のプラグインの設定ファイルです。
外部のOpenSearchに接続するため以下を記載します。
remoteClusterConnectionId="REMOTE"
- com.liferay.portal.search.opensearch2.configuration.OpenSearchConnectionConfiguration-REMOTE.config
OpenSearchのプラグインの接続設定のファイルです。
active=B"true"
authenticationEnabled=B"true"
connectionId="REMOTE"
httpSSLEnabled=B"false"
logExceptionsOnly=B"false"
networkHostAddresses=["http://localhost:9200"]
password="[Docker起動時に指定した環境変数]"
username="admin"
動確
OpenSearch → Liferayの順に起動します。
特にエラーログ等出力されなければプラグインの適用が成功しているはずです。
Liferayのコントロールパネルの「検索」のメニューから状態を確認できます。

インデックス管理から全件の再インデックシングを行うと、検索も何となくできてそうです。

現状はBETA版なのでプロダクションに使用するにはまだ不安があります。
元々Elasticsearchから派生したもので、通常利用する分にはむしろOpenSearchの方が制約が多く今のところのメリットは少ないかもしれません。
現状すぐにOpenSearchにしたい人は少ないと思いますが、AWSのサービスと連携させられるようになったりするなら選択の幅が広がるかもしれませんね。
今後の動向に期待!

アッキーでした!
