DjangoでMySQLなサイトでのSolr環境構築メモ
Solrとは
なんかすごいOSSの検索エンジンであるLuceneを元にしたREST風になんか楽ができる検索サーバー。サーバーはJavaでできているが、クライアントはいろいろなスクリプトで取り出せるらしい
インストール
とりあえずhomeにwgetしただけ。好きなところから落としましょう
http://www.apache.org/dyn/closer.cgi/lucene/solr/
wget http://ftp.jaist.ac.jp/pub/apache//lucene/solr/3.5.0/apache-solr-3.5.0.tgz tar xzvf apache-solr-3.5.0.tgz
インストールはこれだけでできる。ここではapache-solr-3.5.0を解凍したディレクトリを$SOLRとする。
実行にはJDKが必要らしいのでこれもいれる。
sudo apt-get install openjdk-6-jdk
起動する場合以下
cd $SOLR/example/ java -jar start.jar
起動したサーバーをウェブで確認する
http://localhost:8983/solr/admin/
参考::検索エンジンの常識をApache Solrで身につける (1/4) - @IT
追記
aptだとパッケージがあったよ……
sudo apt-get install solr-common sudo apt-get insatll solr-jetty sudo apt-get install solr-tomcat
どれをつかえばいいかはわからない
日本語検索のためにLucene-gosenの導入
デフォルトだと日本語検索に難があるので形態素解析のために辞書なりなんかすごいやつをいれる
http://code.google.com/p/lucene-gosen/downloads/list
wget http://lucene-gosen.googlecode.com/files/lucene-gosen-1.2.1-ipadic.jar
このままだとpathが通らないので $SOLR/exsample/solr/lib/ にlucene_gosenを入れる。
初期状態だと存在しないから作ること!(ここではまった)
cd $SOLR/example/solr mkdir lib cp lucene-gosen-1.2.1-ipadic.jar $SOLR/example/solr/lib/
で、$SOLR/example/solr/conf/schema.xml に以下を追記
これで導入はできたので試しに形態素解析してみることができる。adminからanalysisってやつをクリック
http://localhost:8983/solr/admin/analysis.jsp
Field type : text_ja Field value : いままではてブを完全に作業用ツールにしていたのは、なんていうかはてブがどうしても評価システムになってしまう、自分の行為がサイトへの影響を少なからず与えてしまうのがなんかいやだったというのがある。純粋にただ取り上げてフローしてしまいたいからこうしてはてブをつかわなかった。 verbose output にチェックを入れる
参考::Apache Solr 3.3.0 で日本語検索できるようになるまでにしたこと - 働かないプログラマのメモ帳
参考::Debian に Tomcat 7 + Apache Solr 3.5.0 + 日本語検索対応環境を構築(lucene-gosen使用) - Symfoware
MySQLのデータをSolrにインデックスする
Webアプリなのでダミーデータはすでにはいっているものとする。
JDBCドライバのインストール
SolrサーバーとMySQLをつなぐためにJDBCドライバなるものが必要なのだそうだ
sudo apt-get install libmysql-java
で、これをpathを通してあげないといけないのだが、よくわからないので無理やりコピーした
cp /usr/share/java/mysql-connector-java-5.1.10 $SOLR/dist/
で、$SOLR/example/solr/conf/solrconf.xml に以下を追加
参考::java - Solr can't find JDBC driver - Stack Overflow
参考::【Ubuntu】JDBCドライバをインストールする - Stay hungry. Stay foolish.
DataImportHandlerの追加
$SOLR/example/solr/conf/solrconfig.xml に追記
data-config.xml
同じ階層に data-config.xmlを生成する
touch data-config.xml
schema.xmlの修正
オリジナルをバックアップしてからいじろう
cp schema.xml schema.xml.orig
今回Djangoを使っているのだがMySQLはこんな感じ
mysql> desc Url;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Field | Type | Null | Key | Default | Extra |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
id | int(11) | NO | PRI | NULL | auto_increment |
url | varchar(2048) | NO | NULL | ||
title | varchar(2048) | NO | NULL | ||
user | varchar(255) | NO | NULL | ||
count | int(11) | NO | NULL | ||
ctime | datetime | NO | NULL |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
schema.xmlの編集は本当に意味がわからないのでてきとうにやった。これから修正するかも。
あと一応ここも修正した
id title
あとtext が残っているとまたなんかエラーがでるので CopyField周りも消した
data-config.xmlを編集
サンプルのDBはhsqldbとかいうやつだったのでwhereの部分を current_timestamp に変更した。
adminのページから正常にアクセスできることを確認しよう。
またコマンドラインから全部入れ替えるときDIHを使う場合は以下
curl http://localhost:8983/solr/dataimport -d command=full-import -d clean -d qt=/dataimport
差分だったらこれでいいかも
curl http://localhost:8983/solr/dataimport -d command=delta-import -d qt=/dataimport
http://localhost:8983/solr/admin/dataimport.jsp?handler=/dataimport
参考::MySQL のデータを Solr にぶちこむ: おちエンのブログ
参考::SolrのDataImportHandlerを使用して、DB2のデータを取り込む - Symfoware
検索結果を抽出する
つかう
ドキュメントのまんま
import solr # create a connection to a solr server s = solr.SolrConnection('http://example.org:8083/solr') # do a search response = s.query('title:lucene') for hit in response.results: print hit['title']
Djangoでつかう
あとはこれをどーにかDjangoに展開するviews.pyに
def search(request): s = solr.SolrConnection("http://localhost:8983/solr") res = s.query(u"title:Google") return direct_to_template(request,"search.html", {"res":res})
こんな感じでいれてやる。テンプレートには
{res.numFound}}件みつかりました {% for obj in res %} <li>{{ obj.title }}</li> <li>{{ obj.url|urlize }}</li> <li> <a href="{{ DOMAIN }}/user/{{ obj.user }}">{{ obj.user }}</a>が読んだかも</li> <li> <a href="{{ DOMAIN }}/feed/{{ obj.pk }}">{{ obj.ctime }}</a></li> <hr /> {% endfor %}
こんな感じでresで渡したものをforで取り出してそれぞれプロパティを列挙してやればいい。
solrpyのresをdir(res)してやるといろいろとプロパティがあるのでそれらをさがしていろいろみるといいと思う。numFoundとかドキュメントないから自力で見つけたし。
簡易的だけど
いちおうできたよ!わーい
書籍
Webだと断片的なのでいちおう書籍もかった。
Apache Solr入門 ―オープンソース全文検索エンジン
- 作者: 関口宏司,三部靖夫,武田光平,中野猛,大谷純
- 出版社/メーカー: 技術評論社
- 発売日: 2010/02/20
- メディア: 大型本
- 購入: 17人 クリック: 553回
- この商品を含むブログ (21件) を見る