Solr構築入門

9月 14, 2020Middleware,solr

概要

  • Solrは使ったことがないけれど、作ったことはあるぞ。ということで、Solr構築入門をまとめます。
  • SolrはApacheソフトウェア財団のLuceneプロジェクトのサブプロジェクトとして開発された、オープンソースの全文検索システムです。Apache Solrは、インターネット上のサイト検索や企業内に蓄積されたファイルやデータの全文検索に利用されています。
  • 今回はAWSで起動したEC2のインスタンスに、Solrのソフトウェアインストール、コアの作成(コアは検索エンジンそのもの)、スキーマ(RDBMSのテーブルのようなもの)を定義して、データを投入するまでの流れを記載しています。
 

Solr構築方法

Solrソフトウェアのインストール

  • javaをインストールします。

$ sudo yum install java-1.8.0-openjdk.x86_64
$ yum list installed java-1.8.0-openjdk.x86_64
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Installed Packages
java-1.8.0-openjdk.x86_64        1:1.8.0.222.b10-0.amzn2.0.1         @amzn2-core
$ which java
/usr/bin/java
 
  • Solrのパッケージをダウンロードして、展開します。

$ sudo curl -LkvOf http://ftp.riken.jp/net/apache/lucene/solr/8.4.1/solr-8.4.1.tgz
↑ 事前に最新版のダウンロードURLを確認すること
$ tar zxf solr-8.4.1.tgz
$ sudo mv solr-8.4.1 /opt/solr
$ ls -ld /opt/solr
drwxrwxr-x 9 ec2-user ec2-user 201 Feb  7 08:15 /opt/solr
 
  • Solr環境設定(solr.in.sh)の編集

$ sudo mkdir -p /var/solr/data
$ sudo mv /opt/solr/server/solr/solr.xml /var/solr/data
↑/var/solr/dataを作成し、solr.xmlを移動
$ sudo cp /opt/solr/server/resources/log4j2.xml /var/solr
↑環境設定に合わせて、log4j2.xmlを配置する
$ cd /opt/solr/bin
$ sudo cp -p solr.in.sh solr.in.sh_20200207
$ sudo vi solr.in.sh
↑solr.in.shを編集する(変更内容は下記diffを参照)
$ diff solr.in.sh_20200207 solr.in.sh
99a100
> SOLR_PID_DIR=/var/solr
103a105
> SOLR_HOME=/var/solr/data
112a115
> LOG4J_PROPS=/var/solr/log4j2.xml
119a123
> SOLR_LOGS_DIR=/var/solr/logs
 
  • solrユーザーの作成

$ sudo useradd solr
$ sudo chown -R solr:solr /opt/solr /var/solr
$ ls -ld /opt/solr
drwxrwxr-x 9 solr solr 201 Feb  7 08:15 /opt/solr
$ ls -ld /var/solr
drwxr-xr-x 3 solr solr 18 Feb  7 08:22 /var/solr
 
  • Solr Serviceの自動起動設定とサービス起動

$ sudo vi /usr/lib/systemd/system/solr.service
-----
[Unit]
Description=Apache Solr Service
[Service]
Type=forking
User=solr
EnvironmentFile=/opt/solr/bin/solr.in.sh
ExecStart=/opt/solr/bin/solr start
ExecStop=/opt/solr/bin/solr stop
[Install]
WantedBy=multi-user.target
-----
$ ls -l /usr/lib/systemd/system/solr.service
-rw-r--r-- 1 root root 220 Feb  7 08:31 /usr/lib/systemd/system/solr.service
$ sudo systemctl daemon-reload
$ systemctl status solr.service
● solr.service - Apache Solr Service
   Loaded: loaded (/usr/lib/systemd/system/solr.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
$ sudo systemctl enable solr.service
Created symlink from /etc/systemd/system/multi-user.target.wants/solr.service to /usr/lib/systemd/system/solr.service.
$ sudo systemctl start solr.service
$ systemctl status solr.service
● solr.service - Apache Solr Service
   Loaded: loaded (/usr/lib/systemd/system/solr.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-02-07 08:33:03 UTC; 3s ago
  Process: 15321 ExecStart=/opt/solr/bin/solr start (code=exited, status=0/SUCCESS)
 Main PID: 15362 (java)
   CGroup: /system.slice/solr.service
           mq15362 java -server -Xms512m -Xmx512m -XX:+UseG1GC -XX:+PerfDisab...
Feb 07 08:32:59 ec2-solr01 systemd[1]: Starting Apache Solr Servic...
Feb 07 08:32:59 ec2-solr01 solr[15321]: *** [WARN] *** Your open f...
Feb 07 08:32:59 ec2-solr01 solr[15321]: It should be set to 65000 ...
Feb 07 08:32:59 ec2-solr01 solr[15321]: If you no longer wish to s...
Feb 07 08:32:59 ec2-solr01 solr[15321]: *** [WARN] ***  Your Max P...
Feb 07 08:32:59 ec2-solr01 solr[15321]: It should be set to 65000 ...
Feb 07 08:32:59 ec2-solr01 solr[15321]: If you no longer wish to s...
Feb 07 08:33:03 ec2-solr01 solr[15321]: [146B blob data]
Feb 07 08:33:03 ec2-solr01 solr[15321]: Started Solr server on por...
Feb 07 08:33:03 ec2-solr01 systemd[1]: Started Apache Solr Service.
Hint: Some lines were ellipsized, use -l to show in full.
$
 
  • 下記URL にアクセスし、Solrがインストールされ、起動していることを確認
    • http://<IPアドレス>:8983/solr
 

コア作成とスキーマ定義

  • コアの作成

$ sudo su - solr
$ /opt/solr/bin/solr create -c TestDB
WARNING: Using _default configset with data driven schema functionality. NOT RECOMMENDED for production use.
         To turn off: bin/solr config -c TestDB -p 8983 -action set-user-property -property update.autoCreateFields -value false
Created new core 'TestDB'
 
  • コアの設定ファイル(solrconfig.xml)配置

$ cd /var/solr/data/TestDB/conf
$ ls -l
total 120
drwxrwxr-x 2 solr solr  4096 Feb  7 08:15 lang
-rw-rw-r-- 1 solr solr 55659 Jan 10 06:54 managed-schema
-rw-rw-r-- 1 solr solr   873 Jan 10 06:50 protwords.txt
-rw-rw-r-- 1 solr solr 49058 Jan 10 06:54 solrconfig.xml
-rw-rw-r-- 1 solr solr   781 Jan 10 06:50 stopwords.txt
-rw-rw-r-- 1 solr solr  1124 Jan 10 06:50 synonyms.txt
$ mv solrconfig.xml solrconfig.xml.backup
$ cp /tmp/solrconfig.xml .
 
  • スキーマの設定ファイル(schema.xml)配置

$ mv managed-schema managed-schema.backup
$ cp /tmp/schema.xml .
 
  • その他に、solrconfig.xmlおよびschema.xmlで参照するconfigファイルがある場合は “/var/solr/data/TestDB/conf" に配置する。
  • 必要なライブラリがある場合は “/opt/solr/server/solr-webapp/webapp/WEB-INF/lib" に配置する。
  • Solrの再起動

$ /opt/solr/bin/solr restart
*** [WARN] *** Your open file limit is currently 1024.
 It should be set to 65000 to avoid operational disruption.
 If you no longer wish to see this warning, set SOLR_ULIMIT_CHECKS to false in your profile or solr.in.sh
*** [WARN] ***  Your Max Processes Limit is currently 4096.
 It should be set to 65000 to avoid operational disruption.
 If you no longer wish to see this warning, set SOLR_ULIMIT_CHECKS to false in your profile or solr.in.sh
Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 5327 to stop gracefully.
Waiting up to 180 seconds to see Solr running on port 8983 [\]
Started Solr server on port 8983 (pid=6001). Happy searching!
$
 
  • コアの作成とスキーマ定義を確認
   

データ投入

  • curlコマンドを使い、データ(csv)をアップロードします。
【コマンド例】
$ curl 'http://localhost:8983/solr/TestDB/update/csv?commit=true' --data-binary @/tmp/sample.csv -H 'Content-type:application/csv'
 
  • データアップロード後、ドキュメント数が増えていることが分かります。  
 
  • コアのQueryメニューからデータのクエリができることを確認します。
   

データ削除

  • データ削除は、下記curlコマンドで行う。
 
【コマンド例】
$ curl -v 'http://localhost:8983/solr/TestDB/update?commit=true' -H 'Content-Type: text/xml' --data-binary '<delete><query>*:*</query></delete>'
 

参考資料

  • アップロード方法の詳細は、下記を参照。