Apache Solrを利用してみた

この記事はApache Solrの設定からpythonによる使用までを書いていく記事です。 今回Apache Solrのバージョンは、5.5.0を対象にします。

参考

ダウンロード

リンクからバージョンを選んでダウンロードして下さい。(解凍も忘れずに)

解凍後のディレクトリに移動して、作業していきます。

サーバ起動

Apache Solrの起動は以下のコマンドで行います.

bin/solr start

以下のリンクに飛ぶと、Apache Solrという画面が出てくると思います。

これで起動成功です。

起動時のポート番号を指定する場合

bin/solr start -p $(port_number)

コア

コアとは、一つのデータベースみたいなものです。 コアごとにいろいろデータを登録していきます。

  • 作成
bin/solr create -c $(core_name)
  • 削除
bin/sor delete -c $(core_name)

ドキュメント登録

bin/post -c $(core_name) $(file_name)

対応ファイルは、

検索

ここから登録したドキュメントに対して検索を行います. 以下のコードをコピペして,main.pyというファイルを作成してください. (core_nameとqueryを各自のコア名と検索単語に変えてください)

import urllib

url = "http://localhost:8983/solr/<core_name>/select?q=<query>&wt=python&indent=true"
res = urllib.urlopen(url) # urlを開く
response = eval(res.read()) # dictを取り出す

# 検索結果のdictを、hitとして取り出す
for hit in response['response']['docs']:
    # hitを用いた処理を書く(ex. hit['data'] -> dataという名前のkeyのValueを取得する)

いろいろなパラメータ

Apache Solrは多くのパラメータによって検索結果を変更することができます. 以下に今回使用するパラメータを示します.

パラメータ 役割
sort 与えられた値でソートをする(ex. &sort=<field_name>)        
rows 取得件数を設定する(ex. &rows=100)            
fl 検索結果として取ってくるフィールドを設定する(ex. &fl=<field_name>)

パラメータを用いた検索

url = "http://localhost:8983/solr/<core_name>/select?q=<query>&sort=strdist(<fl_name>,<query>,edit)+desc&rows=100&fl=<fl_name>&wt=python&indent=true"

ファンクションクエリ(strdist関数)

上記のパラメータを用いた検索で利用したstrdistなどはファンクションクエリといいます.strdistの他に多数あります.

strdist(<str1>, <str2>, edit)

この場合はstr1とstr2の距離をはかって、値を返します。 他にもいろいろありますが、使用してないので説明は省きます。

ファンクションクエリを使う際の注意点

Apache Solrの性質上、登録したドキュメントを用いてソートなどを利用したい時には設定を変えないとエラーになります.

そこで回避方法としてsolr-x.x.x/server/solr/<core_name>/conf/managed-schemaの中を少し変更します。

  • 変更内容
multiValued="true"
↓
multiValued="false"

その後、以下のコマンドで再起動し修正完了です。

bin/solr restart

まとめ

起動→コア作成→データ登録→検索、までが一連の流れです。