0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

solr

Last updated at Posted at 2023-06-13

 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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?