Apache Fundationが管理する全文検索エンジンである.
Javaで書かれている.
メンテナンス時にはすでに忘れているので,自分用によく使うコマンドなどを記す.
DockerコンテナとしてSolr環境を構築
ラズパイの場合のdocker準備
PCの場合も同じだと思われるが,Rapsberry Pi OSの場合には,次のコマンドで準備を行っておく.
$ curl -sSL https://get.docker.com | sh
$ sudo apt install python3-pip
$ sudo pip3 install docker-compose
dockerでSolrを導入
以降は,PCであれラズパイであれ,Linux上で行う作業は同じ.
$ mkdir solrdata //データ保存用ディレクトリをホスト側に作っておく
$ sudo chown -R 8983:8983 solrdata //オーナーを変更
$ docker run --name solr --rm -v ./solrdata:/var/solr -p 8983:8983 solr:latest &
--name
dockerイメージを指定
(指定したdockerイメージがホスト側に保存されていなければ,docker hubから自動でダウンロードされる)
(ホスト側に保存されているdockerイメージの一覧は $ docker images
コマンドで参照できる)
-v
永続的にデータを保存するため,
ホスト側の ./solrdata
ディレクトリをコンテナ側の /var/solr
にマウントする.
起動したか確認
方法1:ウェブブラウザで確認
dockerコンテナが起動するとSolrのサーバが走るので,ウェブブラウザから localhost:8983
にアクセスするとウェブアプリ(管理ツール)が表示される.
方法2:コマンドで確認
次のコマンドで現在起動中のDocker一覧が出力される.
停止させたい場合は,コマンド docker stop solr
を使う.
$ docker ps
コンテナのシェルに入る
次のコマンドで,solrコンテナ側のシェルに入れる.
$ docker exec -it solr /bin/bash
Dockerコンテナを起動した状態で,すでにSolrが走っている.
Solrの停止
停止したい場合は次のコマンドを,コンテナ側のシェルで実行する.
solr stop
Solrの起動
次のコマンドでsolrを起動する.
$ solr start
環境変数
Dockerイメージ solr
にはSolr関係の環境変数があらかじめ設定されている.
環境変数 | 値 |
---|---|
SOLR-PID_DIR | /var/solr |
SOLR_UID | 8983 |
SOLR_INCLUDE | /etc/default/solr.in.sh |
SOLR_GID | 8983 |
SOLR_JETTY_HOST | 0.0.0.0 |
SOLR_HOME | /var/solr/data |
SOLR_USER | solr |
SOLR_LOGS_DIR | /var/solr/logs |
SOLR_GROUP | solr |
ホスト側からコンテナ側へコマンドの送り方
$ docker exec
ホスト側のコマンドラインで実行することで,コンテナ上でコマンドを実行させられる.
(次のコマンドは,postコマンドでexampleコアにドキュメントを登録する例)
幾つかのコマンドを実行する場合は,コンテナ側のシェルに入った方がよいが,1つのコマンドを実行するだけなら,ホスト側から この docker exec
コマンドを使った方がよいかもしれない.
$ docker exec -it solr post -c example /opt/solr/example/exampledocs/books.csv
コアを作る
次のコマンドをコンテナ側のシェルで実行することで `testCore' という名称のコアを作成する.
$ solr create_core -c testCore
ホスト側のウェブブラウザで localhost:8983
にアクセスすると,コアができていることを確認できる.
スキーマ定義
フィールドタイプ
フィールドタイプは,差し当って予め用意されたものを使うので,今回は独自の定義はしない.
フィールド
コンテナのシェルからSchema APIを使ってスキーマを定義する.
方法1:ファイルから読み込ませる
スキーマ定義する内容を予めjsonファイルとして用意しておき,それをコマンドで読み込ませる.
ここでは,'testCore_schema.json` というファイルを予め用意しておき,それをコマンドで読み込んでスキーマ定義を行う.
$ curl -X POST -H 'Content-type:application/json' --data-binary @testCore_schema.json http://localhost:8983/solr/testCore/schema
方法2:コマンドラインでスキーマ定義する
コマンドでスキーマを定義するjsonデータを読み込ませられる.
一例として次にコマンドを示す.
$ curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-field" :{
"name":"id",
"type":"string",
"indexed":"true",
"stored":"true",
"required":"ture",
"multiValued":"false"
},
"add-field" :{
"name":"chapter",
"type":"string",
"indexed":"true",
"stored":"true",
"required":"ture",
"multiValued":"false"
},
"add-field" :{
"name":"title",
"type":"text_ja",
"indexed":"true",
"stored":"true",
"required":"ture",
"multiValued":"false"
},
"add-field" :{
"name":"body",
"type":"text_ja",
"indexed":"true",
"stored":"true",
"required":"ture",
"multiValued":"false"
},
"add-field" :{
"name":"author",
"type":"text_ja",
"indexed":"true",
"stored":"true",
"required":"ture",
"multiValued":"true"
}
}' http://localhost:8983/solr/testCore/schema
ドキュメント登録
データを食わせてインデックスを作成する.
jsonファイルかxmlファイルを読み込ませられる.
Solrに付属するpostツールを使えば,PDFを含む各種ファイルも読み込ませられる.
ここでは,SolrのREST APIを使ってjsonファイル(add_data.json
)として用意したデータを登録する.これは,Curlコマンドを使ってHTTP経由で行う.
ホスト側(もしくはネットワークでつながったリモートホストから)で次のコマンドを実行する.
$ curl -X POST -H 'Content-Type:text/json' 'http://localhost:8983/solr/testCore/update/json/docs?commit=true' -d @add_data.json
検索
/select
に次の要素を加えると様々な結果を得られる.
単語の出現数
その文章における対象単語の出現数
フォーマット
fl=termfreq(検索対象欄, '検索対象語')
例
fl=termfreq(author, '手塚おさむし')
Score
フォーマット
fl=score
例
全ての要素とscore
をレスポンスさせる例.
fl=*, score
参考文献
(1)Apache Solr Reference Guide
https://solr.apache.org/guide/solr/latest/index.html
(2)Function Queries
https://solr.apache.org/guide/7_4/function-queries.html#termfreq-function