調べ物をするときにソースコードがあった方が便利な場合もありますので、 Lucene/Solr の trunk のソースコードを取得して動かしてみます。
Java と Ant と Subversion はインストール済とします。
ソースコードをチェックアウトする
ASF のプロジェクトのお作法に従ってチェックアウトします。 詳しくはこちらのページを参照。
- Source Code Repository - apache.org
$ svn co http://svn.apache.org/repos/asf/lucene/dev/trunk lucene-solr (出力省略)
中身を確認しておきます。
$ cd lucene-solr/ $ ls README.txt build.xml dev-tools/ lucene/ modules/ solr/
ソースコードをビルドする
build.xml のターゲットを確認しておきます。
$ grep "<target" build.xml <target name="test" description="Test both Lucene and Solr" depends="validate"> <target name="javadocs" description="Generate Lucene and Solr javadocs"> <target name="validate" description="Validate dependencies, licenses, etc."> <target name="compile" description="Compile Lucene and Solr"> <target name="get-maven-poms" <target name="generate-maven-artifacts" description="Generate Maven Artifacts for Lucene and Solr"> <target name="eclipse" description="Setup Eclipse configuration"> <target name="idea" description="Setup IntelliJ IDEA configuration"> <target name="clean-idea" <target name="clean" description="Clean Lucene and Solr">
compile でコンパイルしてくれますので、これを実行してしばらく待ちます。 一応、時間も計測しておきましょう。(Ant 自体が時間を出力するので、 time コマンドはなくても良い。)
$ time ant compile (出力省略) BUILD SUCCESSFUL Total time: 58 seconds real 0m58.528s user 1m16.734s sys 0m7.490s
次に、Solr の example 用に必要なファイルをコピーします。
$ cd solr $ time ant example (出力省略) example: [copy] Copying 1 file to /Users/shigeru/workspace/lucene-solr/solr/example/webapps [jar] Building jar: /Users/shigeru/workspace/lucene-solr/solr/example/exampledocs/post.jar [echo] See /Users/shigeru/workspace/lucene-solr/solr/example/README.txt for how to run the Solr example configuration. BUILD SUCCESSFUL Total time: 25 seconds real 0m26.300s user 0m36.986s sys 0m4.495s
最後の echo 部分で「README.txt を見てね」と出力されていますので、 読んでおきましょう。
サンプルを動かしてみる
example ディレクトリにサンプルがありますので、 これを使って簡単なテストを実施します。 README.txt に書かれていることでもあります。
Jetty を使って起動する
example ディレクトリに移動して起動させます。
$ cd example $ java -jar start.jar (出力省略) 2012-01-14 22:42:16.215:INFO::Started SocketConnector@0.0.0.0:8983
最後に、8983番ポートで待ち受けているログが出力されていますね。
管理画面を表示する
ブラウザで "http://localhost:8983/solr/admin/" にアクセスすると管理画面を表示できます。 設定ファイルの表示や、クエリの確認などができます。
インデクスを追加する
example/exampledocs に post.jar と post.sh というファイルがあります。 これが XML を投げるプログラムになっており、引数でインデクスに追加するファイルを指定します。
サーバを起動しているのとは異なるターミナルを起動し、 exampledocs ディレクトリまで移動します。 このディレクトリにはサンプルの XML がありますので、 それらのすべてをインデクスに追加します。
$ cd {your-lucene-solr-trunk} $ cd solr/example/exampledocs $ java -jar post.jar *.xml SimplePostTool: version 1.4 SimplePostTool: POSTing files to http://localhost:8983/solr/update.. SimplePostTool: POSTing file gb18030-example.xml SimplePostTool: POSTing file hd.xml SimplePostTool: POSTing file ipod_other.xml SimplePostTool: POSTing file ipod_video.xml SimplePostTool: POSTing file manufacturers.xml SimplePostTool: POSTing file mem.xml SimplePostTool: POSTing file monitor.xml SimplePostTool: POSTing file monitor2.xml SimplePostTool: POSTing file mp500.xml SimplePostTool: POSTing file sd500.xml SimplePostTool: POSTing file solr.xml SimplePostTool: POSTing file utf8-example.xml SimplePostTool: POSTing file vidcard.xml SimplePostTool: COMMITting Solr index changes..
最後にコミットも発行されています。 サーバ側のログにもコミットされたとのメッセージが出力されています。
インデクスに追加する XML の書式は、Wiki に記載されています。
フィールド名などは schema.xml と統一しておく必要がありますので、 自分でカスタマイズする場合にはこのファイルも確認しておきましょう。
なお、インデクスを更新するには、XML 以外にも CSV や DIH (Data Import Handler) も使えます。 DIH のサンプルは example/example-DIH にあります。
検索してみる
"q" パラメータに検索式を記載して検索してみます。 "q" パラメータの記法は Lucene 由来で、次のページに記述されています。 AND, OR, NOT といった条件も確認できます。
実際に、id フィールドが "apple" のドキュメントを検索します。 ヒューマンリーダブルにするため、"indent=true" も追加しておきます。
$ curl "http://localhost:8983/solr/select?q=id:apple&indent=true" <?xml version="1.0" encoding="UTF-8"?> <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">4</int> <lst name="params"> <str name="indent">true</str> <str name="q">id:apple</str> </lst> </lst> <result name="response" numFound="1" start="0"> <doc> <str name="id">apple</str> <str name="compName_s">Apple</str> <str name="address_s">1 Infinite Way, Cupertino CA</str></doc> </result> </response>
デフォルトでは XML で出力されますが、 "wt" パラメータを指定すると JSON でもレスポンスを取得できます。
$ curl "http://localhost:8983/solr/select?q=id:apple&indent=true&wt=json" { "responseHeader":{ "status":0, "QTime":1, "params":{ "indent":"true", "wt":"json", "q":"id:apple"}}, "response":{"numFound":1,"start":0,"docs":[ { "id":"apple", "compName_s":"Apple", "address_s":"1 Infinite Way, Cupertino CA"}] }}
おわりに
Solr の trunk のソースコードを取得し、自分でビルドしてサンプルを動かしました。 trunk 特有のことは何もしていませんが、とりあえず環境を作っておくと便利かな、と。
あと、こんなイベントもあったんですね。行けばよかった。。
0 件のコメント:
コメントを投稿