Elasticsearchなども流行ってますが、案件でやるときの定番はSolrかなぁということで、Drupal8で、Solr検索を導入してみます。
感覚的には1万を超えるノードで検索機能があるときはMySQLの全文検索は厳しいなぁとおもってます。Solrだったら10万とかでも余裕ですね。
※Cronのインデックス更新の負荷は要注意ですけど
まずは、Solrを動かすために必要なJavaをいれます。今回はSolrの6系を入れるので、Javaは1.8です。
# yum install java-1.8.0-openjdk
元々Javaの1.7が入っていたので、1.8を使用するように変更します。
# alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
2 /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java
Enter to keep the current selection[+], or type selection number: 2
Javaのインストールと設定ができたので、Solrをインストールします。
# wget http://ftp.jaist.ac.jp/pub/apache/lucene/solr/6.6.2/solr-6.6.2.tgz
# tar xzf solr-6.6.2.tgz
# ./solr-6.6.2/bin/install_solr_service.sh solr-6.6.2.tgz
testというコアを作ります。コアを作るときは、solrユーザになる必要があります。
# /etc/init.d/solr start
# su - solr
$ cd /opt/solr/bin/
$ ./solr create_core -c test
つづいて、Drupal で Solrを利用するためのモジュールをいれます。
$ drush en search_api
$ drush en search_api_solr
Project search_api_solr contains 2 modules: search_api_solr_defaults, search_api_solr.
Module search_api_solr doesn't meet the requirements to be enabled. [error]
Solr search requires the solarium/solarium library. [error]
solarium が必要と怒られたので、composer でいれます。
$ composer require drupal/search_api_solr
すると、モジュールが入ります。
$ drush en search_api_solr
The following extensions will be enabled: search_api_solr
Do you really want to continue? (y/n): y
search_api_solr was enabled successfully. [ok]
モジュールが提供する、Solrの設定ファイルを、Solrに読み込ませます。
# cp -R /home/drupal/html/hiqvc/modules/contrib/search_api_solr/solr-conf/6.x/* /var/solr/data/test/conf/
# /etc/init.d/solr restart
あとは、管理画面の「環境設定」 > 「Search API」 で「Add Server」を押下し、先ほどインストールしたSolrの情報を入力し、「Add Index」で、インデックスしたいものを選択すれば完了です。