2012年8月13日 星期一

django + haystack + elasticsearch


前言
網路評價,同樣也是全文檢索的 sphinx 在效能上是非常優異的,而 java base 的 lucene 在效能上表現較差。而先前也曾經整合過 sphinxdjango 中。
為何會再研究整合 elasticsearch 主要原因有二:

  • sphinx 採用的授權方式用在商業上有可能會有爭議
  • 由於 haystack 的支援,對 django 的整合性非常高
  • 至於效能的議題,或許等資料量真的大到某個程度後再來煩惱也不遲。(尤其 sphinx 的 reindex 速度如此之快,到時再派它出馬也行…)

    事前準備
    請先閱讀ec2(ubuntu12.04) + django + apache + mysql + scrapy + sfc(sphinx) 安裝
    重複的步驟便不在贅述,主要是把 sfc 換成 haystack + elasticsearch

    安裝步驟
    安裝 elasticsearch(參考 https://gist.github.com/2026107)
    apt-get install openjdk-7-jre -y

    wget https://github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.19.8.tar.gz -O elasticsearch.tar.gz
    tar -xf elasticsearch.tar.gz
    rm elasticsearch.tar.gz
    mv elasticsearch-* elasticsearch
    mv elasticsearch /usr/local/share

    curl -L http://github.com/elasticsearch/elasticsearch-servicewrapper/tarball/master | tar -xz
    mv *servicewrapper*/service /usr/local/share/elasticsearch/bin/
    rm -Rf *servicewrapper*
    /usr/local/share/elasticsearch/bin/service/elasticsearch install
    ln -s `readlink -f /usr/local/share/elasticsearch/bin/service/elasticsearch` /usr/local/bin/rcelasticsearch


    EC2 micro 規格較差,需將 ES_HEAP_SIZE 改為 256 (or 512) 才有辦法跑起來,所以需要調整 configure 檔案,更動檔案最上方兩行

    vi /usr/local/share/elasticsearch/bin/service/elasticsearch.conf
    set.default.ES_HOME=/usr/local/share/elasticsearch/ set.default.ES_HEAP_SIZE=256

    啟動 elasticsearch
    service elasticsearch start

    透過 curl 測試
    curl http://localhost:9200
    {   "ok" : true,   "status" : 200,   "name" : "Mammomax",   "version" : {     "number" : "0.19.8",     "snapshot_build" : false   },   "tagline" : "You Know, for Search" }
    安裝 haystack
    (假設已經安裝好 django/mysql 等相關環境)
    apt-get install git
    pip install -e git+https://github.com/toastdriven/django-haystack.git@master#egg=django-haystack
    cd src/django-haystack/
    python setup.py install
    cd ~
    rm -r src

    安裝其他相關套件
    pip install requests

    pip install -e git+git://github.com/toastdriven/pyelasticsearch.git@master#egg=pyelasticsearch
    cd src/pyelasticsearch/
    python setup.py install
    cd ~
    rm -r src

    設定資料庫
    mysql -u root –p
    CREATE DATABASE HaystackSearch default character set utf8mb4;
    exit

    建立 Django 專案
    自行建立一個專案可參考
    http://django-haystack.readthedocs.org/en/latest/tutorial.html

    採用我已經建立好的專案(主要以上面教學為主進行操作)
    上傳 HaystackSearch 資料夾至 /root/
    (需設定 mysql 帳號密碼)

    cd ~/HaystackSearch
    python manage.py runserver 0.0.0.0:80

    http://[EC2_IP]/admin/HaystackSearch/note/add/
    新增幾筆後,下達
    python manage.py update_index

    接著就可以在底下頁面測試搜尋的結果了
    http://[EC2_IP]/search

    沒有留言:

    張貼留言