Neo4j
#日記 #2026年 #2月3日 2026年2月-3 18:46
Mass++ ユーザ会で教えてもらったので、仕事で使い始めた。
コミュニティ版がGPLで配布されているJavaで実装されたグラフデータベースで、pythonバインディングが用意されている。
Neo4j Graph Database & Analytics | Graph Database Management System
高度に階層化されたデータはグラフデータベースの方が扱いやすそうなので、試してみようと思う。
生物種のオントロジーデータで練習してみようと思う。以下に実装例を見つけたので。
Analyzing the Evolution of Life on Earth with Neo4j | by Tomaz Bratanic | TDS Archive | Medium
blogs/ncbi at master · tomasonjo/blogs
neosemantics
auxという名前のフォルダが含まれている。よく使われるフォルダ名だが、なんと、Windowsでは使えないフォルダなんだとかで、git cloneできない。
とはいえ、Windowsのファイルシステムにそんな制約はないので、WSL上のUbuntuにマウントしたWindowsフォルダ上にgit cloneできた。
そのまま WSLのUbuntu上に OpenJDK21(Windows側に入れてたのと同じ環境)を入れて、ビルドしたfatjarをWindows上のNeo4jにプラグインしたら、問題なく動作した!(素晴らしい、諦めない私と、Ubuntu。)
ビルド時に JAVA_HOMEをセットしわすれて、ある程度ビルドが進んだ頃にfailしたのは内緒。できれば、すぐにfailして欲しかったなー。Native なUbuntu動作環境も使える私にとって、WSLなんてディスクひっ迫要因でしかなかったのだが、環境整備不良によるトラブル発生源でもあると認識。まあ、1台で完結できる点がWSLのメリットなので、併用しているのだが。
taxonomyではなく、もう少し規模の小さなオントロジーデータ(owl形式)のインポートを試みたが、うまくいった。
元のオントロジーデータに不足する情報を、ノードのプロパティとして追加したが問題なく(?)できた。
実際の処理をGitHub Copilotにやってもらったら、最初、accession idをつかったexact match(等価マッチという用語をcopilotは使っていた)をせずに文字列パターンマッチングをしていたので、1000倍遅くなり、ロールバックしてコードを作り直すことになった。Copilot単独では修正できなくて、こちらからexact matchするようにクエリを修正しろと指示する必要があった。exact matchできるかどうかを検討して欲しいものだ。2026年6月のGitHub Copilot値上げの影響で、モデルに安価なchat gpt 5-mini を使ったので、もう少し賢いモデルを使ったら違ったかも。