技術評論社の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では空だった。