-
Notifications
You must be signed in to change notification settings - Fork 9
django haystack ElasticSearch Kuromojiで日本語全文検索
Java製サーチエンジンの「ElasticSearch」を使ってKawazポータルを日本語全文検索できるようにします。
例の如くMac向けに書いているので、その他の環境ではがんばってください
普通にjava
とかしてしまうと、Java6が入ってしまう。
ElasticSearchはJava7以上で走らせないと落ちるっぽいので、Java7以降を入れること!
Homebrew Caskで入れるのが楽ちんです。
$ brew cask install java
$ java -version
Java(TM) SE Runtime Environment (build 1.8.0xxx)
こうすると、Java8が入る(2014/7/27現在)
$ brew install elasticsearch
ここでは1.3.0を入れている。バージョンが変わると、Kuromojiのバージョンも変わるかも。(後述)
Kuromojiとは、日本語向けの形態素解析ライブラリ
ElasticSearch で kuromoji を使う (ES 0.90.Beta1 + kuromoji 1.2.0篇) - Qiita
$ cd /usr/local/Cellar/elasticsearch/1.3.0 # バージョン1.2.1の場合。バージョンによってPATHが変わるので注意!
$ bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/2.3.0 # 必ず2.3.0(後述)
これだけでKuromojiが自動的に使われるようになる。
なぜかKuromojiの2.2.0
じゃないとTokenizerで死ぬ。2.1.0
でも、なぜか2.3.0
でもダメ。
どうやらKuromojiとElasticsearchのバージョンがちゃんとあっていないとエラー吐くらしい。
以下の環境では動くことを確認。
Elasticsearch | Kuromoji |
---|---|
1.2.1 | 2.2.0 |
1.3.0 | 2.3.0 |
両者のバージョンが一致していないと、rebuild_index
の際に何かJavaのエラー吐いて死ぬので注意すべし。
参考:
MongoDB+Elasticsearchで全文検索をする(失敗) - エロサイトの作り方
MongoDB+Elasticsearchで全文検索をする(リトライ) - エロサイトの作り方
古い資料だと、この後elasticsearch.yml
の変更が必要だと書いているが、最近のやつだと初期設定でもインストールされていればKuromojiを使ってくれる。
$ cd ~/Kawaz3rd
$ pip install --upgrade -r requirements.txt
これで、django-haystack
と、pyelasticsearch
が入ればOK
今のDBのデータをインデックス化してあげる必要がある
$ elasticsearch # index作成前に起動する必要がある
$ python manage.py rebuild_index --noinput # --noinput付けないとハマるので注意!(後述)
$ python manage.py update_index
これで上手くインデックスがアップデートされたはず。終わったらelasticsearchを停止させても良い。
haystackのバグで、Python3で動かすときは--noinput
を付けないと動かない。
結構前に直ってるのにまだ正式版にmergeされてなくて地獄っぽい。
manage.py
と、elasticsearch
両方のログを見ること。manage.py
で上手く行っててもelasticsearch
がJavaのエラー吐いてることがある。
Haystack 2.1 with python 3.3.2 and Django 1.6 · Issue #902 · toastdriven/django-haystack
$ honcho start -f Procfile.dev
これで自動的にelasticsearchも立ち上げてくれる。便利
以下のページにアクセスして検索してみましょう。
http://localhost:8000/search/
ちゃんと検索できてるっぽかったら成功!お疲れ様でした。
このままでも使えるけど、高速化には Celery + Redisを設定すると良いらしい。あとでやる。
django-celery 3.1.10 : Python Package Index
Django + Haystack + Elasticsearch コトハジメ