Apache Solr入門を読む(1)_Solrのインストールと動作確認

技術評論社のAphache Solr入門を読んでいく。

[改訂第3版]Apache Solr入門――オープンソース全文検索エンジン (Software Design plus)

何年か前に興味が沸いて買ってみたものの、結局チラッと眺めただけで積んでしまった本。

Solr、というか検索エンジン全般について興味があるのだけど、今のところほとんど無知なので(大学の講義で転置インデックスとかtf-idfについての話をちょろっとだけ聞いたことがあって、あとは仕事で少し使ったことがあるくらい)、この本をきっかけにいろいろ遊んでみたい。

Solrのインストールと動作確認

書籍ではjavaをインストールしてsolrを入れて、という手順が紹介されているのだけど、出版から6年くらい経過した現在ではdockerイメージを使うのが手軽そう。 公式のガイドもとても親切に書かれている:Solr in Docker :: Apache Solr Reference Guide

こんな感じでdocker-compose.ymlを書いて docker compose up -d する。

version: "3.9"
services:
  solr:
    image: "solr:9.2.1"
    ports:
      - "8983:8983"
    volumes:
      - data:/var/solr
    command:
      - solr-precreate
      - gettingstarted
volumes:
  data:

起動後に下記のコマンドを実行すると、example/exampledocs/manufactures.xmlに記述されたドキュメントが入る。

$ docker exec -it solr_sandbox-solr-1 post -c gettingstarted example/exampledocs/manufacturers.xml
/opt/java/openjdk/bin/java -classpath /opt/solr/server/solr-webapp/webapp/WEB-INF/lib/solr-core-9.2.1.jar -Dauto=yes -Dc=gettingstarted -Ddata=files org.apache.solr.util.SimplePostTool example/exampledocs/manufacturers.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/gettingstarted/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file manufacturers.xml (application/xml) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update...
Time spent: 0:00:01.074

http://localhost:8983/ にアクセスすると、こんな感じでWeb UIが見れて、先ほど投入した記事を確認できる。

curlでたたいてみる

UIからはアクセスできたので、次はcurlでたたいてみる。 リクエスト先もパラメータもWeb UIの検索画面上部に表示されているので、それをコピペすればよさそうだった。

$ curl "http://localhost:8983/solr/gettingstarted/select?indent=true&q.op=OR&q=*%3A*&useParams="
{
  "responseHeader":{
    "status":0,
    "QTime":1,
    "params":{
      "q":"*:*",
      "indent":"true",
      "q.op":"OR",
      "useParams":""}},
  "response":{"numFound":11,"start":0,"numFoundExact":true,"docs":[
      {
        "id":"adata",
        "compName_s":"A-Data Technology",
        "address_s":"46221 Landing Parkway Fremont, CA 94538",
        "_version_":1766592876165201920},
      {
        "id":"apple",
        "compName_s":"Apple",
        "address_s":"1 Infinite Way, Cupertino CA",
        "_version_":1766592876309905408},
      {
        "id":"asus",
        "compName_s":"ASUS Computer",
        "address_s":"800 Corporate Way Fremont, CA 94539",
        "_version_":1766592876310953984},
      {
        "id":"ati",
        "compName_s":"ATI Technologies",
        "address_s":"33 Commerce Valley Drive East Thornhill, ON L3T 7N6 Canada",
        "_version_":1766592876312002560},
      {
        "id":"belkin",
        "compName_s":"Belkin",
        "address_s":"12045 E. Waterfront Drive Playa Vista, CA 90094",
        "_version_":1766592876312002561},
      {
        "id":"canon",
        "compName_s":"Canon, Inc.",
        "address_s":"One Canon Plaza Lake Success, NY 11042",
        "_version_":1766592876313051136},
      {
        "id":"corsair",
        "compName_s":"Corsair Microsystems",
        "address_s":"46221 Landing Parkway Fremont, CA 94538",
        "_version_":1766592876315148288},
      {
        "id":"dell",
        "compName_s":"Dell, Inc.",
        "address_s":"One Dell Way Round Rock, Texas 78682",
        "_version_":1766592876316196864},
      {
        "id":"maxtor",
        "compName_s":"Maxtor Corporation",
        "address_s":"920 Disc Drive Scotts Valley, CA 95066",
        "_version_":1766592876317245440},
      {
        "id":"samsung",
        "compName_s":"Samsung Electronics Co. Ltd.",
        "address_s":"105 Challenger Rd. Ridgefield Park, NJ 07660-0511",
        "_version_":1766592876318294016}]
  }}

リクエストパラメータの意味はいまいちよくわかっていないけど、ともかくこれでコマンドラインからも検索結果を取得できた。

ディレクトリ構成の確認

コンテナのの中に入って、本を読みながらディレクトリ構成を眺めていく。

関連する環境変数はこんな感じ。SOLR_DATAは設定されていない。

solr@91ae230d58a3:/opt/solr-9.2.1$ echo $SOLR_HOME
/var/solr/data
solr@91ae230d58a3:/opt/solr-9.2.1$ echo $SOLR_DATA

solr@91ae230d58a3:/opt/solr-9.2.1$ echo $JAVA_HOME
/opt/java/openjdk

Java 17(Temurin)が使われているらしい。

solr@91ae230d58a3:/opt/solr-9.2.1$ /opt/java/openjdk/bin/java --version
openjdk 17.0.7 2023-04-18
OpenJDK Runtime Environment Temurin-17.0.7+7 (build 17.0.7+7)
OpenJDK 64-Bit Server VM Temurin-17.0.7+7 (build 17.0.7+7, mixed mode, sharing)

SOLR_HOMEを覗くとこんな感じだった。直下にcoreが並んで、その下にconf, core.properties, dataがそろっている。

solr@91ae230d58a3:/opt/solr-9.2.1$ ls /var/solr/data
gettingstarted
solr@91ae230d58a3:/opt/solr-9.2.1$ ls /var/solr/data/gettingstarted/
conf  core.properties  data
solr@91ae230d58a3:/opt/solr-9.2.1$ ls /var/solr/data/gettingstarted/conf
lang  managed-schema.xml  protwords.txt  solrconfig.xml  stopwords.txt  synonyms.txt
solr@91ae230d58a3:/opt/solr-9.2.1$ ls /var/solr/data/gettingstarted/data
index  snapshot_metadata  tlog

core.propertiesはcore特有の設定を書くファイルで、これが存在するとcoreのディレクトリだと認識されるらしい。 書籍に記載のバージョンではcoreの名称が指定されていたっぽいけど、今回使っている9.2.1では空だった。