Dipus - (主にSphinx向け) 全文検索サーバー¶
Sphinxの検索はデフォルトだとJavaScriptベースであまりいけてないので、 dipusっていうのを作ってみました。これは、Whoosh というPure pythonの全文検索エン ジンを使った全文検索サーバーです。
bitbucket: http://bitbucket.org/r_rudi/dipus
dipusは、sphinxとの連携に重点をおいて開発しており、sphinxのbuilderが付 属しています。そのため、文書の登録はsphinx-buildを実行するだけで完了し ます。
ちょっとした手間でsphinxの検索をいけてるものにします。というか、まだ開 発途中なのでしたいです、ですが。
なお、dipusは会社など非公開の場所で動かされることを想定しており、大量の アクセスがあったりとかDoSがきたらとかはあんまり想定してません。公開の場 所に置かれているドキュメントはgoogleなどを使うほうがいいと思います。
デモ¶
とりあえず sphinx-jpのページをコピーしたものを用意しました。 sphinxjpのテーマは検索結果のハイライトがうまく動かなかったので、 デフォルトのテーマにしています。
ただ、dipusサーバーは単にコマンドラインで動かしているだけですし、 実はさくらのレン鯖(VPSじゃなくて!)で動かしてるので、しょっちゅう殺さ れます。動かなくても怒らないでね!
導入方法¶
まずはいつもどおりpipで。whooshやbottle、simplejsonなどもインストール されます。
% pip install dipus
使用方法¶
(2012-08-23 更新。ものぐさな人のためにデフォルト設定を強化)
dipusサーバー用設定ファイルを書きます
jsonで、indexrootへのパスを書きます。このパスの下にインデックスファ イル出来ます。
{ "indexroot": "/path/to/index" }
デフォルトで、 0.0.0.0:9876 で立ち上がります。
dipusサーバーを立ち上げます
% python -m dipus.websetup -c conf.json
これでサーバー側の準備は終わりです。
sphinxドキュメントのconf.pyに以下の設定を加えます
extensions = ['dipus.dipusbuilder']デフォルトではdipusサーバーをlocalhost:9876とみなします。 また、ドキュメントの識別子としてconf.py中のprojectが使われます。
自分で設定したい場合は以下のように書いてください。
# dipus_host_url = "http://192.168.1.20:9876" # dipusサーバー設定と合わせて下さい # dipus_index = "test_rst" # このドキュメントの識別子となります
設定ファイルを書き出すために、まず一回buildします。
% sphinx-build -b dipus source buildbuildにより、dipusサーバーにドキュメントがどんどん送られます。注意し てほしいのは、build自体はすぐに終わりますが、サーバー側でのindex作成 には時間がかかりますので、すぐには検索しないでください。sphinxjpの場 合、15分ほどかかりました。
_templates/search_dipus.htmlをコピー
先ほどの builder実行で _static/search_dipus.js と_templates/search_dipus.html が出来てます。
このうち_templatesの方をsearch.htmlにコピーします。これは _template/search.html が定義されてる場合の回避措置です。すでに search.htmlを定義していたら、jsの呼び出し部分だけを変えればいいです。
このあたりうまいやりかたがあるといいんだけど…
% cp _templates/search_dipus.html _templates/search.html
Makefileを書き換えます
Makefileのhtml部分に一行書き足します
html: $(SPHINXBUILD) -b dipus $(ALLSPHINXOPTS) $(BUILDDIR)/html $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
make htmlします
あとは普通にmake htmlをすれば、都度ドキュメントが登録されます。 一度登録されているものは「更新」となりますので重複にはなりません。
(あ、むしろ消す方法が今のところないな…)
API¶
dipusはsphinxとの連携を主眼に置いて開発しましたが、APIはJSONのPOSTと GETで、中身はJSONですので他の用途にも使えます。
具体的にはこんな感じ
登録¶
curl -XPOST 'http://localhost:9200/spam/' -d '{
"_index" : "spam",
"title": "Here comes new document!"
"path" : "dir/test1",
"message" : "Some thing new document"
}'
検索¶
curl -XGET 'http://localhost:9200/spam/_search?q=Here'
or
curl -XGET 'http://localhost:9200/spam/_search?q=Here?callback=jsonp10293'
{
"hits":{
"total" : 1,
"hits" : [
{
"_index" : "spam",
"_id" : "1",
"_source" : {
"postDate" : "2012-08-25T14:12:12",
"title": "Here comes new document!",
"path": "dir/test1",
"message" : "Some thing new document"
}
}
]
}
}
まだ開発途中なのでAPIは変わると思いますが、手軽に全文検索を使いたい、と いう用途にはいいかもしれません。
これから¶
とりあえず動いたレベルでまだまだまだ、いっぱい足りてません。ちょぼちょ ぼと開発していこうかと思います。次は複数のドキュメントを横断検索したり とかしたいですね。
Comments
comments powered by Disqus