Neo4jのCentOSへのインストールとデータの操作

人気のあるグラフDB Neo4jの環境を[こちら](https://qiita.com/hiro_alt/items/558288387d9004b38c04)と[こちら](https://moneyforward.com/engineers_blog/2016/01/13/neo4j/)の手順で構築した手順をまとめます。

##事前準備
javaが必要[※](https://neo4j.com/docs/operations-manual/3.4/installation/requirements/)な為、Java最新Version install   

```
yum -y install java-1.8.0-openjdk
```

##Neo4jのインストールと確認
yumでのインストールは[こちら](https://neo4j.com/docs/operations-manual/current/installation/linux/rpm/)の手順

```
rpm --import https://debian.neo4j.org/neotechnology.gpg.key

vi /etc/yum.repos.d/neo4j.repo
[neo4j]
name=Neo4j RPM Repository
baseurl=https://yum.neo4j.org/stable
enabled=1
gpgcheck=1

yum -y install neo4j-3.4.9

neo4j --version
```

##Neo4jサービスの起動
サービス起動時に管理ツールがhttp://localhost:7474 で起動される

```
systemctl enable neo4j
systemctl start neo4j
```

##リモートアクセスの許可
neo4l.confの設定

```
vi /etc/neo4j/neo4j.conf

dbms.connector.http.enabled=true
dbms.connector.http.listen_address=XX.XX.XX.XX:7474 #サーバーのIPアドレス

dbms.connector.bolt.listen_address=0.0.0.0:7687  #Boltプロトコルコネクタ 
(0.0.0.0追加 ：漏れていると下記エラー)

systemctl restart neo4j

firewall-cmd --add-port=7474/tcp --zone=public --permanent
firewall-cmd --add-port=7687/tcp --zone=public --permanent
firewall-cmd --reload
```

※エラー： “WebSocket connection failure. Due to security constraints in your web browser, the reason for the failure is not available to this Neo4j Driver”

##管理コンソール　
http://XX.XX.XX.XX:7443にneo4j/neo4j (デフォルトパスワード）でアクセス
![neo4j.PNG](https://qiita-image-store.s3.amazonaws.com/0/251519/c4bbea33-a518-473d-df8a-bce3905e7da2.png)


##グラフDBの用語
* ノード：　データレコード   例）従業員、会社、都市
* リレーションシップ：　ノード間の関係　　例）会社のCEO、会社の所在都市
* プロパティ：　ノード/リレーションシップの持つ属性　　例）従業員の名前、CEOの在任期間、

![neo.JPG](https://qiita-image-store.s3.amazonaws.com/0/251519/2e49d284-eff4-55dd-fb85-f2acae607b79.jpeg)


##Nodeの追加
目的）Aさん(所属: 開発部) はBさん(所属: 経理部)を知っているというデータを登録

ノード追加）まずAさん(所属: 開発部)とBさん(所属: 経理部)を登録。
Neo4jではsql likeな Cypher を使って記述する。

```
CREATE (a_san:Person { name: "Aさん", 所属: "開発部" }), (b_san:Person { name: "Bさん", 所属: "経理部" })
RETURN a_san, b_san;
```
Aさん、Bさん2名のノードが追加される
![neo.JPG](https://qiita-image-store.s3.amazonaws.com/0/251519/35f5eb1f-1b91-a621-224a-dc0c2e9cc26a.jpeg)

##リレーションシップの追加
AさんはBさんを知っている

```
MATCH (a_san: Person), (b_san: Person)
WHERE a_san.name = "Aさん" AND b_san.name = "Bさん"
CREATE (a_san)-[r:知っている]->(b_san)
RETURN r;
```

![neo.JPG](https://qiita-image-store.s3.amazonaws.com/0/251519/195f7f85-60a3-dc94-de35-6354b28de5ba.jpeg)


##チュートリアルの実施
下記コマンドでチュートリアルを呼び出す

```
:play movie graph
```
![neo.PNG](https://qiita-image-store.s3.amazonaws.com/0/251519/31e899cd-1056-2a15-44ea-9fe29f8e149e.png)

例）俳優Kevin Baconから、4つ先までの関係する映画/俳優
![neo.PNG](https://qiita-image-store.s3.amazonaws.com/0/251519/30e0bef8-b781-c3c2-ca6c-5eface77f6de.png)

例）Kevin BaconからMeg Lyanまでの映画/俳優関係の最短パス
![neo.PNG](https://qiita-image-store.s3.amazonaws.com/0/251519/81568e62-966a-e3b4-eca1-79b995464a29.png)


##Neo4j : 主な用途　　
[Amazon グラフデータベースとは？](https://aws.amazon.com/jp/nosql/graph/
)より

* 不正検出
リレーションシップにより、購入トランザクションをほぼリアルタイムに処理可能
例）これから購入予定の人が、既知の不正事例に含まれるEメールアドレスとクレジットカードを使おうとしていることを検出
また、同じEメールアドレスや、同じIP アドレスを共有する複数の人物の関係性も検出可能

* レコメンデーション
DB内に、顧客の興味、友人、購入履歴等のリレーションシップを保持し、購入履歴が似ている他のユーザーが購入した製品に基づいて、ユーザーに製品を推奨することが可能
また、共通の友人がるが、互いに知り合いでない人々に友人関係の推奨を行うことも可能