Upgrade to Pro — share decks privately, control downloads, hide ads and more …

introduction neo4j

introduction neo4j

Kanazawa.rb #71 LT

C4455065001e57c2ea24190134882560?s=128

Kunihiko Ito

July 21, 2018
Tweet

Transcript

  1. Neo4j の紹介 Kunihiko Ito Kanazawa.rb Meetup #71 2018-07-21

  2. はじめ まして

  3. Kanazawa.rb 初参加です

  4. p self 名前: 伊藤 邦彦 出身: 富山 在住: 2017年から富山 所属:

    ESM アジャイル事業部 仕事: [Rails, Neo4j, WebRTC]
  5. @kunitoo GitHub とか

  6. @kunitoo Twitter

  7. Neo4j の紹介

  8. Neo4j とは Neo4jはJavaで実装された、 オープンソースの最も人気の あるグラフデータベースであ る。 [cited from `wikipedia Neo4j']

  9. グラフデータベースとは グラフ構造を扱うことのできる データベース

  10. グラフ構造 ノードとノード間の連結関係を表 すエッジで構成されるデータ型

  11. イメージ

  12. どこで使える? ソーシャルグラフの構築 レコメンドエンジン

  13. クエリ言語 Cypher

  14. フォローしているユーザーの 取得 MATCH (me)-[follow:Follow]->(user) RETURN user

  15. フォローユーザーのフォロー ユーザーまで取得 MATCH (me)-[:Follow]->(user)->[:Follow]->(user2) RETURN user2

  16. フォローユーザーのフォロー ユーザーまで取得 MATCH (me)-[follow:Follow*..2]->(user) RETURN user

  17. アスキーアートみたいにクエ リが書ける MATCH ()-[]->()->[]->()

  18. 使ってみ たくなり ました?

  19. 今すぐダウンロード https://neo4j.com/download/

  20. docker-compose.yml docker-compose up して、 localhost:7474 にアクセス version: '3' services: neo4j:

    image: neo4j ports: - "7474:7474" - "7687:7687" environment: NEO4J_AUTH: "none" volumes: - neo4j:/data volumes: neo4j:
  21. Neo4j Browser

  22. Ruby で利用するには Neo4jrb https://github.com/neo4jrb/ neo4j

  23. Neo4jrb require 'neo4j' Neo4j::Session.open(:server_db, 'http://localhost:7474') session = Neo4j::Session.current session.query.match('(me)-[:Follow]->(user)').return('user')

  24. 問題を解いてみる http://nabetani.sakura.ne.jp/hena/ orde20maze/

  25. Neo4j を使った答え Neo4j::Session.open(:server_db, 'http://localhost:7474') conn = Neo4j::Session.current conn.query('MATCH (n) DETACH

    DELETE n') nodes = {} (?0..?9).each {|n| nodes[n] = Neo4j::Node.create({name: n}, :Pos) } (?A..?Z).each {|n| nodes[n] = Neo4j::Node.create({name: n}, :Pos) } [ [?0, ?1], [?2, ?3], [?3, ?4], [?4, ?5], [?7, ?8], [?8, ?9], [?9, ?A], [?C, ?D], [?F, ?G], [?J, ?K], [?K, ?L], [?L, ?M], [?P, ?Q], [?Q, ?R], [?S, ?T], [?U, ?V], [?V, ?W], [?Y, ?Z], [?0, ?6], [?6, ?C], [?C, ?I], [?I, ?O], [?1, ?7], [?J, ?P], [?P, ?V], [?E, ?K], [?3, ?9], [?9, ?F], [?R, ?X], [?G, ?M], [?M, ?S], [?S, ?Y], [?5, ?B], [?H, ?N], [?N, ?T] ].each do |l1, l2| n1 = nodes[l1] n2 = nodes[l2] Neo4j::Relationship.create(:line, n1, n2) end s, g = input.chars conn.query("MATCH (s:Pos{ name: '#{s}' }), (g:Pos{ name: '#{g}' }), p = shortestPath((s)-[:line*]-(g)) RETURN length(p) AS len").to_a.first.len.to_s
  26. 初期化 Neo4j::Session.open(:server_db, 'http://localhost:7474') conn = Neo4j::Session.current conn.query('MATCH (n) DETACH DELETE

    n')
  27. 迷路の作成 (?0..?9).each {|n| nodes[n] = Neo4j::Node.create({name: n}, :Pos) } (?A..?Z).each

    {|n| nodes[n] = Neo4j::Node.create({name: n}, :Pos) } [ [?0, ?1], [?2, ?3], [?3, ?4], [?4, ?5], [?7, ?8], [?8, ?9], [?9, ?A], [?C, ?D], [?F, ?G], [?J, ?K], [?K, ?L], [?L, ?M], [?P, ?Q], [?Q, ?R], [?S, ?T], [?U, ?V], [?V, ?W], [?Y, ?Z], [?0, ?6], [?6, ?C], [?C, ?I], [?I, ?O], [?1, ?7], [?J, ?P], [?P, ?V], [?E, ?K], [?3, ?9], [?9, ?F], [?R, ?X], [?G, ?M], [?M, ?S], [?S, ?Y], [?5, ?B], [?H, ?N], [?N, ?T] ].each do |l1, l2| n1 = nodes[l1] n2 = nodes[l2] Neo4j::Relationship.create(:line, n1, n2) end
  28. 迷路グラフ

  29. 探索と距離 s, g = input.chars conn.query(" MATCH (s:Pos{ name: '#{s}'

    }), (g:Pos{ name: '#{g}' }), p = shortestPath((s)-[:line*]-(g)) RETURN length(p) AS len" ).to_a.first.len.to_s
  30. Enjoy Neo4j