Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

SlackとElasticsearchを連携し、使いやすい検索システムを作成する

Elasticsearchと対話Botによる対話型の検索システム 第5回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2017/03/13 14:00

 前回はSlackのBotを用いて使いやすい検索システムのUIを作成しました。今回はこれまでに作成した検索用のコンテナとUI提供のコンテナを連携し、質問しやすく使い勝手の良い検索システムを作成します。

目次

対象読者

  • 現場の技術者で、自社や自身のプロジェクトで検索システムを作成する必要のある方
  • 環境差異の少ない検索システムを作成したい方

検証環境

  • 使用言語とバージョン:Python 3.5.0
  • 対応OS(バージョン):Mac、 Windows、Linux(Vagrantが動作する環境)
  • 開発環境:Vagrant 1.8.5、Ubuntu Trusty 14.04 (LTS)、Docker 1.12

Dockerコンテナによる各システムの連携について

 今回は検索機能を提供するElasticsearchとSlack上のUI提供部分を、コンテナによって連携する方法の紹介をします。これにより、システムの結合度が下がって変更や拡張に強い検索システムの提供が可能となります。

図1 疎結合なシステムのイメージ
図1 疎結合なシステムのイメージ

 上図のように、検索用のコンテナを変えるだけで検索の内容を変えることもできますし、UI部分がSlackからLINEに移っても検索部分は再利用可能になっています。

仮想環境の設定

 今回も仮想環境を使用するためVagrantを起動します。

 まず、VagrantfileのIPアドレスを環境に応じて設定してください。他にVagrantを使用している場合は 同一のIPアドレスにならないようにしてください。

  • 例:192.168.33.21
confing.vm.network "private_network", ip {your ip address} 

 第2回の記事で構築したVagrant環境のディレクトリに移動し、Vagrantを起動してください。

cd {your Vagrant folder}
vagrant up

 なお、第3回の記事で取得したWikipediaのデータは今回の記事でも使用するので、「{Vagrantのフォルダー}/elastic-search-docker_parallel/python/Data/split_data/」以下に分割されたJSONファイルがあるか確認してください。

 確認できたら、以下のコマンドでVagrantで作成した環境に入ってください。

vagrant ssh
cd /home/vagrant/elastic-search-docker_parallel/docker
docker pull masayaresearch/elasticsearch_japanese_parallel

 次に、第2回の記事で紹介したDocker環境の構築方法に沿ってDocker環境を構築してください。すでにDockerを起動できる環境をVagrant上で構築済みの方は必要ありません。

Slack用コンテナとElasticsearch用コンテナの連携

 Slack用コンテナとElasticsearch用コンテナの連携を以下の手順で行います。

  1. Elasticsearchコンテナの起動
  2. Elasticsearchコンテナへのデータ登録
  3. SlackコンテナをElasticsearchコンテナと連携して起動

[1]Elasticsearchコンテナの起動

 検索用のElasticsearchコンテナを先に起動し、検索システムを準備しておきます。「-v」のオプションで登録用のデータがあるフォルダを連携しています。第3回で使用したWikipediaのデータを使用して登録します。

docker run -d -v /home/vagrant/elastic-search-docker_parallel/python:/usr/share/elasticsearch/python --name elasticsearch_dialogue -p 9200:9200 -it masayaresearch/elasticsearch_japanese_parallel /sbin/init

 Elasticsearchを起動するには、以下のコマンドを実行します。

docker exec -it elasticsearch_dialogue sh shell/elastic_search_setting.sh

 すると、「sudo」のパスの入力が促されるので、sudoのパスである「e_pass」を入力してコマンドが通るようにします。

[sudo] password for elasticsearch:

[2] Elasticsearchコンテナへのデータ登録

 検索用のElasticsearchコンテナにデータを登録し、検索できるようにしておきます。

 「/usr/share/elasticsearch/python/Data/split_data」に第3回の記事で作成したデータが保存されているので、そのデータのディレクトリを指定します。

 パイプ数と並列数は並列のためのパラメータになります。こちらも詳しい内容は第3回の記事に載せています。

  • パイプ数:1
  • 並列数:10

 著者の環境では上のパラメータで試して約10秒で登録処理が終了したため、このパラメータでも問題ないと思われます。

docker exec -it elasticsearch_dialogue sh shell/elastic_regist_search_json_parallel.sh ${あなたが設定したいパイプ数} ${あなたが設定したい並列数} /usr/share/elasticsearch/python/Data/split_data 

[3]SlackコンテナをElasticsearchコンテナと連携して起動

 SlackコンテナとElasticsearchコンテナの連携部分です。

 まずは今回の連携用Slackコンテナを取得します。

docker pull masayaresearch/slack_dialogue 

 次に、ElasticsearchコンテナとSlackコンテナを下記のコマンドで連携します。 「--link」のオプションで連携するコンテナを指定してElasticsearchコンテナと連携して起動しています。

docker run --link elasticsearch_dialogue -it masayaresearch/slack_dialogue bash

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 大串 正矢(オオグシ マサヤ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2012年2月時点での登録メンバは37名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂き...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:Elasticsearchと対話Botによる対話型の検索システム

おすすめ記事

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5