2018年3月15日現在
PostgreSQLをWatson Discovery
に接続する手順
Kohei Nishikawa
1
2018年3月15日現在
チャットボットの仕組み例
会話エンジン
照会・検索
エンジン
照会用ストレージ
業務用データベースファイルサーバー
Watson Discovery
Watson
Discovery
Data Crawler
チャットボットの仕組みの例として、上図のように、チャットボットの裏に会話を制御する仕組み、「会話エンジ
ン」があり、利用者からの質問に適切な結果を返すために、「照会・検索エンジン」があります。「照会・検索エ
ンジン」は、「照会用ストレージ」とつながり、「照会用ストレージ」に、業務用データベースやファイルサーバー
から取得したテキストデータが格納され、チャットボット利用者からの質問に適切に回答する源泉となります。
上図では「照会・検索エンジン」に、 Watson Disocveryを使用しており、接続する業務用データベースとして、
MySQLや基幹系で使われる PostgreSQL、Oracle DB、DB2、Microsoft SQL Serverなどをサポートしていま
す。今回は、PostgreSQLを接続する手順について紹介します。
2
2018年3月15日現在
Watson Discovery Data Crawler
照会・検索
エンジン
照会用ストレージ
業務用データベースファイルサーバー
Watson Discovery
Watson
Discovery
Data Crawler右図のように、「照会・検索エンジン」に、 Watson Disocvery
を使用している場合、業務用データベースを接続するには、
「Watson Discovery Data Crawler」という専用のツールを使
用します。
Watson Discovery Data Crawler は、2018年3月現在、
Linux のみサポートしています。
今回は、確認用に下記構成の仮想サーバーを用意しまし
た。PostgreSQLの導入手順は省きます。
● Ubuntu 16.04 LTS
○ 長期サポート対応
○ UbuntuはLinuxで最大シェア
● メモリ 2GB
● ディスク 25GB
● OpenJDK 8
● PostgreSQL 10.1
● JDBCドライバ
○ PostgreSQL JDBC 4.2 Driver, 42.2.1
Watson Discovery Data Crawler
オンラインヘルプ
https://console.bluemix.net/docs/
services/discovery/data-crawler.
html
3
2018年3月15日現在
PostgreSQL サンプルテーブル
PostgreSQL接続ユーザー名:pgadmin
PostgreSQL接続パスワード:postgres
作成データベース名: sample
ホスト名:localhost
ポート:5432
テーブル名:sales
id | name | amount | price | toral
----+--------+-----------+---------+---------
1 | 佐藤 | 20 | 10000 | 200000
2 | 鈴木 | 30 | 10000 | 300000
3 | 諏訪 | 35 | 10000 | 350000
4 | 高橋 | 35 | 20000 | 700000
5 | 藤堂 | 25 | 40000 | 1000000
この内容で、サンプルデータベースとサンプルテーブルを用意した前提
で次ページから説明が進みます。
4
2018年3月15日現在
Watson Discovery サービス資格情報
Watson Discovery画面にアクセスし、
「サービス資格情報」画面にて、Watson
Discoveryに接続するための「username」
と「password」をメモしておきます。
Watson Discoveryを有効にしていない場
合は、こちらの記事を参考に、コレクショ
ンとともに有効にします。
https://qiita.com/kolinz/items/b3be17c
33694c9745697
サービス資格情報が無い場合は、「新規
資格情報」をクリックし、資格情報を作成
します。
5
2018年3月15日現在
Environment ID / Collection ID / Cofiguration ID
Watson Discovery画面で、「Launch tool」をクリックし、Web上の管理UIであ
る「Watson Discovery Tooling」を起動します。起動後、作成済みのコレク
ションを選択します。選択したコレクションに、PostgreSQLを接続します。
Watson Discovery Data Crawlerでは、作成済みのコレクションに接続する
ための3つのIDを使用します。
コレクション画面で、「Use this collection in API」をクリックすることで、左図
のように表示されますので、それぞれ、メモします。
6
2018年3月15日現在
Watson Discovery Data Crawler ダウンロード
ここからの作業は、Linux上で実行してください。
Linux上のWebブラウザでWatson Disocvery画面にアクセスし、「管理」にて、Intended Use の説明から、Linux用のインストー
ラーをダウンロードします。Red Hat/Cent OS系 または、Ubuntu系が対象です。ここでは、シェアが最も多いUbuntu系を想定し
ているため、「DEB」をクリックします。
7
2018年3月15日現在
Watson Discovery Data Crawler インストール
[インストールとJDBCドライバの配置]
ダウンロードした「crawler_2.1.4_all.deb」(2018年3月16日現在) があるディレクトリに移動します。
Watson Discovery Data CrawlerのインストールとJDBCドライバを配置します。
$ sudo su
# apt-get install default-jdk
# dpkg -i crawler_2.1.4_all.deb
# cd /opt/ibm/crawler/connectorFramework/crawler-connector-framework-0.1.18/java/database/
# wget https://jdbc.postgresql.org/download/postgresql-42.2.1.jar
[PostgreSQL接続用パスワードの暗号化]
ここでは、PostgreSQL接続用パスワードを、postgres としています。
# cd /opt/ibm/crawler/bin/
# ./vcrypt --encrypt --keyfile ../share/examples/config/id_vcrypt -- "postgres" > my_secret_data.txt
# cat my_secret_data.txt
[[vcrypt ….で始まる長い英数字 をコピーし、エディタに貼り付けておきます。
後述の seeds/database-seed.conf で使用します。
8
2018年3月15日現在
設定ファイルの複製
PostgreSQLへの接続するために、設定ファイルのサンプルを複製します。
以後、複製した設定ファイルを用いて設定を進めます。
# cd /opt/ibm/crawler/share/examples/
# cp -r config /opt/ibm/crawler/mypostgres/config
# cd /opt/ibm/crawler/mypostgres/config
# ls
# connectors crawler.conf discovery id_vcrypt log4j_custom.properties logs orchestration seeds
9
2018年3月15日現在
設定ファイルの編集(1)
crawler.conf を編集します。
# The configuration key within this block to pass to the chosen input adapter. の直下を次のように書き換え。
config = "../connector_framework", に書き換え。 /の前に、ドットを2つ追加。
#crawl_config_file = "connectors/filesystem.conf", の下に、
crawl_config_file = "connectors/database.conf", を追記。
#crawl_seed_file = "seeds/filesystem-seed.conf", の下に、
crawl_seed_file = "seeds/database-seed.conf", を追記。
# Supply "database" when using the Database connector. の直下を次のように書き換え。
extra_jars_dir = "database", に書き換え。
10
2018年3月15日現在
設定ファイルの編集(2)-1
seeds/database-seed.conf を編集します。
# For example: postgresql://mydbserver.test.com:5000/countries/street_view?per=1000
{
name ="url",
value="postgresql://localhost:5432/sample/sales?per=1000" ← サンプルデータベースとテーブルを指定。
},
# Username and password for accessing this database. The username and password need to be separated by a :
# Example: username:password"
{
name="user-password",
data="PostgreSQL接続用ユーザー名: vcryptで暗号化したPostgreSQL接続用パスワード" ← このルールで記述。
},
11
2018年3月15日現在
設定ファイルの編集(2)-2
seeds/database-seed.conf を編集します。
# When specified, this string will override the JDBC Class used by the connector when (other) is chosen as the
# Database System.
{
name="jdbc-class",
data="org.postgresql.Driver" ← ダウンロードしたPostgreSQL用JDBCドライバのクラス名を入力。
},
# When specified, this string will override the automatically generated JDBC connection string. This allows you
# to provide more detailed configuration about the database connection, such as load-balancing or SSL  
 connections.
# Example: jdbc:netezza://127.0.0.1:5480/databasename
{
name="connection-string",
data="jdbc:postgresql://localhost:5432/sample" ← JDBC接続用URLを入力。サンプルデータベースとテーブルを指定。
},
12
2018年3月15日現在
設定ファイルの編集(3)
discovery/discovery_service.conf を編集します。
environment_id = “” に、Watson Discoveryの作成済みコレクションで取得した、Environment_id を入力。
collection_id = “” に、Watson Discoveryの作成済みコレクションで取得した、Collection_idを入力。
configuration_id = “”に、Watson Discoveryの作成済みコレクションで取得した、Configuration_idを入力。
# Your Discovery Service credentials
credentials {
username = " ", に、Watson Discovery サービス資格情報画面で取得した、username を入力。
password = " " に、Watson Discovery サービス資格情報画面で取得した、password を入力。
},
13
2018年3月15日現在
設定ファイルの確認とData Crawlerの実行
[設定ファイルの確認]
設定ファイルの内容が正しいかチェックするために、下記コマンドを実行します。
# cd /opt/ibm/crawler/mypostgres
# crawler testit
[Data Crawlerの実行]
crawler testit で問題がないことを確認できたら、 Data Crawlerを実行し、PostgreSQL内のデータを、Watson Discoveryのコレクション用ストレー
ジ(照会用ストレージ )に登録します。
# crawler crawl
Watson Discoveryのコレクションにアクセスし、 PostgreSQLのレコードが登録されているか確認します。
14
2018年3月15日現在
Data Crawlerの実行結果
PostgreSQL内の指定したテーブル内
のレコードが、Watson Discoveryのコ
レクション用ストレージ(照会用ストレー
ジ)に格納されていることがわかります。
15

PostgreSQLをWatson Discoveryに接続する方法