SlackとElasticsearchを連携し、使いやすい検索システムを作成する
Elasticsearchと対話Botによる対話型の検索システム 第5回
ダウンロード サンプルファイル (2.2 KB)
前回は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提供部分を、コンテナによって連携する方法の紹介をします。これにより、システムの結合度が下がって変更や拡張に強い検索システムの提供が可能となります。
上図のように、検索用のコンテナを変えるだけで検索の内容を変えることもできますし、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用コンテナの連携を以下の手順で行います。
- Elasticsearchコンテナの起動
- Elasticsearchコンテナへのデータ登録
- 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
この記事は参考になりましたか?
- Elasticsearchと対話Botによる対話型の検索システム連載記事一覧
-
- SlackとElasticsearchを連携し、使いやすい検索システムを作成する
- 使いたくなる検索システムのUIをSlackBotで実現する
- Elasticsearchへの大量データ登録の効率化
- この記事の著者
-
WINGSプロジェクト 大串 正矢(オオグシ マサヤ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
