Amazon国別サイト横断検索のために - Apache Solr (その1)

前回Amazon Product Advertising API については一通りさわったわけだけど、取得したデータのキャッシュと、キーワードの翻訳、類似商品のマージ等をやっていく必要があることもわかった。
この辺りをできるだけ楽に、ということで、キャッシュと商品検索補助のために Apache Solr を調査してみることにした。

セットアップ&動作確認

まずは、Apache Solrのインストールを実施する。
Downloadリンクから辿って、アーカイブファイルをダウンロード、展開すればOK。
2013-08-17時点での最新版は 4.4 だったので、それをそのまま利用する。

まずは、チュートリアル(docs/tutorial.html)に沿って、動作を確認する。

exampleを起動:

$ cd solr-4.4.0/example/
$ java -jar start.jar 
0    [main] INFO  org.eclipse.jetty.server.Server  ? jetty-8.1.10.v20130312
....

ブラウザからアクセスして起動を確認:

http://localhost:8983/solr/

一通りメニューから確認したところ、問題は無さそう。

サンプルデータの利用と確認

次に、サンプルデータを登録する。

$ cd exampledocs/
$ java -jar post.jar *.xml
SimplePostTool version 1.5
Posting files to base url http://localhost:8983/solr/update using content-type application/xml..
POSTing file gb18030-example.xml
POSTing file hd.xml
POSTing file ipod_other.xml
POSTing file ipod_video.xml
POSTing file manufacturers.xml
POSTing file mem.xml
POSTing file money.xml
POSTing file monitor.xml
POSTing file monitor2.xml
POSTing file mp500.xml
POSTing file sd500.xml
POSTing file solr.xml
POSTing file utf8-example.xml
POSTing file vidcard.xml
14 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/update..
Time spent: 0:00:00.528

管理画面から、"collection1" を選択して出てくる "Query"タブを選択して、"q"テキストボックスに"solr"を入力して検索すると、結果が1件ヒットする。
"wt"で取得結果のフォーマットを選べて、json が見やすいが、xml の方が細かな情報を拾ってくれるので見比べると面白い。

動作確認は直接URLを指定した方が早い。チュートリアルを見ると、「コア名/select」に続けて "q"パラメータに検索式を、"wt"に結果のフォーマット(xml等)を指定する。

http://localhost:8983/solr/collection1/select?q=solr&wt=xml

検索式の基本ルール

検索式の指定方法の基本は以下の通り。

   [対象フィールド名:]キーワード

フィールドが省略された場合は、検索可能なフィールド全てを対象に検索を行う模様。以前は、defaultSearchField で対象を指定していたが、今は廃止されたらしい。
キーワードには範囲指定が可能で、例えば「400まで」は "[* TO 400]" になる。
複数の検索式を指定する場合は、AND/OR/NOTで論理式を組み立てられる。指定しない場合は OR 指定と同義。また、"+"をキーワードの前に付ける事で必須であることを指定可能。例えば、Aは存在する事が必須(must)で、Bは存在しなくても良い(may)、という検索式は以下のようになる、

  +A B

細かなところは、SolrQuerySyntaxを参照して辿っていけばよい。(Query Parser Syntaxが基本)

後は、"fl"パラメータにフィールド名を指定する事で、取得するフィールドを選択したり、"sort"パラメータで並べ替えを行ったり出来る。
他にも色々とあるが、まあ、こんなところで。

次は Amazonから取得したデータに合わせてスキーマを定義し、データを登録してみる。