SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

対象読者

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

検証環境

  • 使用言語とバージョン: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

次のページ
検索処理部分との連携モジュールについて

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Elasticsearchと対話Botによる対話型の検索システム連載記事一覧

もっと読む

この記事の著者

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

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10005 2017/03/13 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング