この記事は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
まとめ
起動→コア作成→データ登録→検索、までが一連の流れです。