ナレッジ グラフを検索して、ナレッジ グラフに含まれるエンティティとリレーションシップのサブセットを見つけて、さまざまなエンティティが接続している状況を示すことができます。 以下の例をご参照ください。
- 感染症の拡大を表すナレッジ グラフから、所定の施設とのリレーションシップを通して関連付けられた人間と動物を扱います。
- 製造サプライ チェーンを表すナレッジ グラフから、サプライヤー、配達方法、倉庫などの特定の部分に関連付けられたコンテンツを扱います。
- 組織を表すナレッジ グラフから、所定のタイプのデバイスを扱い、そのプロパティ (担当従業員の名前など) を表示します。
- 亀と亀の生息地を表すナレッジ グラフから、特定の環境上の影響評価の情報を使用して、リスクのレベルが確立された生息地を特定します。
ナレッジ グラフを検索することにより、エンティティとリレーションシップのサブセット、またはそのプロパティのサブセットを特定できます。 openCypher クエリ言語を使用して、openCypher クエリを作成することで、関連するエンティティとそのプロパティを検出し、ナレッジ グラフ、マップ、またはリンク チャートで、この制限された情報を操作します。
クエリ ビュー とはすべての Knowledge Studio プロジェクトのデフォルト ビューで、プロジェクトのナレッジ グラフのコンテンツを検索できます。 [クエリ コンテンツ] (下図の 1 番) では新しいクエリを記述する [クエリ] エディター と、プロジェクトの保存時にプロジェクトに保持される [保存済みのクエリ] コレクション がリストされます。 クエリ ボックス (下図の 2 番) は openCypher クエリを書式設定し、実行できる複数行のテキスト ボックスです。 クエリの [結果] (下図の 3 番) はデフォルトでテーブルに表示され、返されたグラフ レコード (下図の 4 番) のプロパティを調べたり、結果からレコードを選択したりすることができます。 マップまたはリンク チャート プレビューで結果と選択セットをプレビューできます。また、結果ツールバー (下図の 5 番) を使用し、選択セットからすべての結果を追加または削除します。 コンテキスト ツールバー (下図の 6 番) にはクエリに特化したツールがあり、プロジェクトにクエリを保存して後から使用できます。
調査のナレッジ グラフのクエリ
クエリ ビュー を使用し、調査のナレッジ グラフのエンティティとリレーションシップをクエリできます。
- [調査コンテンツ] ウィンドウの [クエリ] をクリックし、クエリ ビューを開きます。
クエリ ボックスが開き、結果が表示されない状態でクエリ ビューが開きます。 クエリ ボックスとは、openCypher クエリを書式設定できる複数行のテキスト テキスト ボックスです。
- クエリ ボックスにクエリを入力します。 ポインターを新しい行に移動させて入力を続行するには、Enter キーを押します。
例として、「MATCH (e) RETURN e」というクエリは、ナレッジ グラフのすべてのエンティティを返します。 このクエリは任意のナレッジ グラフで使用できます。
ヒント:
クエリから返される結果の数がわからない場合は、クエリの末尾に「LIMIT 1000」を追加すると、予期せず数万件ものレコードが返され、ブラウザーがタイムアウトすることを回避できます。
- [実行] をクリックします。
クエリ結果が [結果] エリアに表示されます。 クエリで返されたエンティティとリレーションシップ レコードは該当するアイコンで識別されます。
openCypher クエリの作成
SQL がリレーショナル データベースにクエリするように、openCypher は、グラフ データベースにクエリします。 このクエリの基本的な構造は、エンティティを検索、照合して、それらのエンティティを返すことです。ここでは、検索するエンティティが括弧内で識別されます。 例として、クエリ MATCH (e) RETURN e は、任意のタイプのエンティティを返します。 返されるエンティティの数は、ナレッジ グラフの構成によってのみ制限されます。 返されるグラフ アイテムの数を制限するには、LIMIT 式を使用します。 例として、クエリ MATCH (e) RETURN e LIMIT 5 は、任意のタイプのエンティティを 5 つ返します。
クエリでは、矢印を作成するシンボルを使用して、関連するエンティティを識別できます。 例として、クエリ MATCH (e1)-->(e2) RETURN e1,e2 は、エンティティのペア e1 と e2 を返します。ここでは、これら 2 つのエンティティの間に、任意のタイプのリレーションシップが存在し、エンティティ e1 からエンティティ e2 までのいずれかのパスが、エンティティを接続します。 クエリが反対方向を指す矢印を使用して作成された場合、パスは、起点エンティティ e2 から終点エンティティ e1 までと見なされます (MATCH (e1)<--(e2) RETURN e1,e2)。 エンティティが相互に関連する方法は、パターンと呼ばれます。
クエリでは、考慮すべき特定のリレーションシップを角括弧内で識別できます。 例として、クエリ MATCH (e1)-[]->(e2) RETURN e1,e2 は、エンティティのペア e1 と e2 を返します。ここでは、任意のタイプの単一のリレーションシップが 2 つのエンティティを接続します。 このクエリは、上に示す同じクエリを別の方法で表しており、推奨されるクエリ構文を示しています。 このクエリは、起点エンティティ e1、リレーションシップ r、終点エンティティ e2 を返すことで、リレーションシップを示すタプル全体を返すように修正できます (MATCH (e1)-[r]->(e2) RETURN e1,r,e2)。 類似のクエリ MATCH (e1)-[ ]->( )-[ ]->(e2) RETURN e1,e2 または MATCH (e1)-[*2]->(e2) RETURN e1,e2 は、同じ方向の 2 つのリレーションシップによって接続されているエンティティのペアを返します。 クエリでは、MATCH (e1)-[ ]->(e2)<-[ ]-(e3) RETURN e1,e2,e3 のように、リレーションシップの方向が異なるパターンも特定できます。
上記のクエリ例は、任意のナレッジ グラフで使用できます。
リレーションシップ タイプとエンティティ タイプをクエリの他のファセットに追加して、特定のリレーションシップ タイプと特定の関連エンティティを考慮するように、クエリを制限できます。 例として、MATCH (p:Person)-[v:HasVehicle]->(e) RETURN p,v,e は、すべての Person エンティティ p を返します。ここでは、HasVehicle リレーションシップ v が Person を別の任意のタイプのエンティティ e に接続します。 変数 p と v は、それぞれ Person エンティティと HasVehicle リレーションシップに割り当てられているため、クエリでそれらに関する情報を返すことができます。 前の例と比較すると、Pet または Document エンティティがリレーションシップの終点になるリレーションシップは結果に含まれません。 ナレッジ グラフのデータ モデルに応じて、終点エンティティ e は、一般的な Vehicle エンティティであるか、Automobile、Motorcycle、Boat、Airplane、Commercial Vehicle といった一連の特定のエンティティ タイプの 1 つである可能性があります。
エンティティとリレーションシップの特定のプロパティをクエリ結果に含めることができます。 例として、MATCH (p:Person)-[:HasVehicle]->(e) RETURN p,e.make,e.model,e.year は、前に定義したのと同じクエリを実行します。 ただし、結果には、終点エンティティ自体が表示されるのではなく、そのエンティティの複数のプロパティ (その車両の make、model、year) にそれぞれ格納される値が表示されます。 この例では、クエリで考慮される特定のリレーションシップに対して、変数が割り当てられませんでした。これは、リレーションシップのデータがクエリ結果に含まれることも、クエリの他の部分で評価されることもないためです。
同様に、対象のエンティティとリレーションシップを定義するプロパティを指定して、評価されるエンティティとリレーションシップを制限できます。 考慮すべきプロパティを定義するには、WHERE 句をクエリに追加します。 上記の例と同様に、WHERE 句でエンティティおよびリレーション シップに関する特定の情報を参照するには、変数を割り当てる必要があります。 例として、クエリ MATCH (p:Person)-[hv:HasVehicle]->(v:Vehicle) WHERE p.lastName = 'Doe' and hv.endDate IS NULL and v.year < 1980 RETURN p,p.firstName,v,v.make,v.year では、特定の lastName プロパティ値を持つ Person エンティティのみが評価されます。HasVehicle リレーションシップは、それらのエンティティの endDate プロパティに NULL 値が含まれている場合のみ考慮されます。関連する Vehicle エンティティは、year プロパティが 1980 より前の値である場合のみ考慮されます。
クエリでは、一連の個別のエンティティおよびリレーションシップを返す代わりに、パターンで表される完全なパスを返すことができます。 これには、MATCH ステートメントで定義されたパターンを変数に割り当て、その変数を返します。 たとえば、クエリ MATCH path = (:Person)-[:HasVehicle]->(:Vehicle) RETURN path は、指定したパターンを満たす、すべてのエンティティとリレーションシップの組み合わせのパスのリストを返します。 各パスには、一致したパターンのすべてのパート (Person、HasVehicle リレーションシップ、Vehicle) が含まれます。 このパターンの個別のパートはクエリで返されないため、変数を割り当てる必要はありません。
クエリ結果の変更と更新
特定のグラフ アイテム タイプと特定のプロパティ値を評価して、ナレッジ グラフで焦点を絞ったエンティティとリレーションシップのセットを取得できます。
- クエリ ボックス内をクリックします。
- 既存の openCypher クエリのテキストを更新します。
例として、クエリを「MATCH (p:Person)-[hv:HasVehicle]->(v:Vehicle) WHERE v.year < 2005 RETURN p, p.firstName, p.phoneNumber, hv, v, v.make, v.model, v.year」に変更して、Vehicle の year プロパティが 2005 よりも前の値である Vehicle エンティティへの HasVehicle リレーションシップを持つすべての Person エンティティを返します。 結果には、Person エンティティの firstName プロパティと phoneNumber プロパティ、HasVehicle リレーションシップ、および Vehicle エンティティの make、model、year プロパティからの値が含まれます。
Enter キーを押して、複数行のテキスト ボックスでポインターまたはクエリのテキストの一部を新しい行に移動させます。 わかりやすくするために行を必要なだけ使用します。
- [実行] をクリックして新しい結果を取得します。
クエリ結果が [結果] セクションに表示されます。 クエリで返されたエンティティとリレーションシップは該当するアイコンで識別されます。
- 必要に応じ、[クリア] をクリックしてクエリ ボックスから現在のクエリのテキストを削除します。
クエリの保存
調査の一部として維持しておきたいクエリを個別に保存することができます。 プロジェクトを保存すると、保存済みのクエリがプロジェクトに保存され、[クエリ コンテンツ] ウィンドウの [保存済みのクエリ] セクション にリストされます。
- クエリ コンテキスト ツールバーの [新しいクエリとして保存] をクリックします。
新しい保存済みのクエリ モーダルが表示されます。
- 必要に応じ:
- [タイトル] 入力エリアにクエリの名前を入力します。
- クエリの説明を [説明] テキスト エリアに入力します。 説明文を読むと、openCypher クエリを読まなくてもクエリ結果のコンテキストがわかります。
- [保存] をクリックします。
クエリは [クエリ コンテンツ] ウィンドウの [保存済みのクエリ] セクション 保存されます。
- 保存済みのクエリ をクリックしてクエリを実行し、結果を表示します。
保存済みのクエリは、選択すると同時に実行されます。 クエリのタイトルと説明は結果の上に表示されます。 クエリ ボックスは表示されません。
- [クエリ ボックスの表示] をクリックし、クエリ ボックスの openCypher クエリ テキストを表示します。
- クエリ テキスト ボックスをクリックし、既存のクエリを変更します。
- クエリ コンテキスト ツールバーの [保存済みのクエリの更新] をクリックし、保存済みのクエリを更新して変更内容を反映します。
- [クエリ コンテンツ] でこの保存済みのクエリの [オプション] メニュー をクリックします。
- [アイテムの名前変更と説明] をクリックし、クエリの [タイトル] テキスト ボックスと [説明] テキスト ボックスを更新して、変更内容を反映します。
- [適用] をクリックします。
- 必要に応じて、この保存済みのクエリの [オプション] メニュー の [削除] をクリックし、プロジェクトから保存済みのクエリを削除します。
クエリ結果の探索
openCypher クエリはさまざまな結果を返すことができます。 クエリがエンティティまたはリレーションシップのリストを返す場合、それらは結果リストに行あたり 1 つのエンティティまたはリレーションシップで表示されます。 クエリで返された値が、クエリの return ステートメントに示される順序で列に表示されます。
openCypher クエリが、どのエンティティが別のエンティティと特定のリレーションシップを持つかを示す結果を返すことがあります。 この場合、結果テーブルには 3 つ組ごとに 1 つの行が表示されます。3 つ組は起点エンティティ、リレーションシップ、終点エンティティで構成されます。 例として、「MATCH (p:Person)-[r]->(e) RETURN p,r,e」というクエリは、結果テーブル内の各行が人、その人と別のエンティティ間のリレーションシップ、そのリレーションシップの終点エンティティを表す結果リストを返します。 この場合、結果テーブルには、「Value 0」というタイトルの人の列、「Value 1」というタイトルのリレーションシップの列、「Value 2」というタイトルの終点エンティティのタイトルがあります。
代わりに、クエリがエンティティまたはリレーションシップの特定のプロパティを返す場合、結果リストでは各列にこれらの値が表示されます。 たとえば、「MATCH (p:Person)-[:HasVehicle]->(v) RETURN p,v,v.year」というクエリは、「Value 0」列に Person エンティティの表示名、「Value 1」列に Vehicle エンティティの表示名、「Value 2」列に Vehicle エンティティの year プロパティの値をそれぞれ返します。 クエリが返した特定のプロパティの値がエンティティにない場合、「(NULL)」値が表示され、表示する値がないことが示されます。
次の例は、人が車両との HasVehicle リレーションシップに属している Person エンティティを返すクエリを示しています。 このクエリは、HasVehicle リレーションシップの acquisitionDate プロパティと Vehicle エンティティの make プロパティも返します。
エンティティ またはリレーションシップ を含む列に、グラフ アイテムの表示名とそのアイコンが表示されます。 上記のスクリーンショットでは、返された Person エンティティが「Value 0」列に表示されています。 HasVehicle リレーションシップの acquisitionDate プロパティは「Value 1」列に表示されています。 Vehicle エンティティの make プロパティの値は「Value 2」列に表示されています。
3 つ目の一般的なクエリ タイプは、あるエンティティと別のエンティティ間のパスを返します。 パスには指定された起点エンティティと終点エンティティ間のすべてのエンティティとリレーションシップが含まれます。 たとえば、「MATCH path=(p:Person)-[r]->(e) RETURN path」というクエリは、Person エンティティに 1 つのリレーションシップで接続されているエンティティへのすべてのパスを返します。 クエリ結果テーブルの「Value 0」列にパスが表示されます。
パスには任意数のエンティティとリレーションシップが含まれます。 たとえば、「MATCH path=(c:Company)-[r*2]-(v:Vehicle) RETURN path」というクエリは、2 リレーションシップ離れた Company エンティティと Vehicle エンティティ間のすべてのパスを返します。 各パスには、Company 起点エンティティ、各中間エンティティおよびリレーションシップ、Vechicle 終点エンティティが含まれます。 クエリ結果テーブルの「Value 0」列にパスが表示されます。 デフォルトでは、パス内の起点エンティティと終点エンティティ、およびパス内の合計レコード数のみが表示されます。 完全なパスの結果を表示するには、[拡張] をクリックします。
パスはクエリ結果の 1 つの要素として返すことができます。 たとえば、起点の Company の path と name、終点の Vehicle の year を同じクエリで返すことができます。 MATCH path=(c:Company)-[r*2]-(v:Vehicle) RETURN path, c.name, v.year クエリ結果テーブルの「Value 0」列には折りたたまれたパス、「Value 1」列には Company エンティティの name プロパティ、「Value 2」列には Vehicle エンティティの year プロパティが表示されます。
すべてのクエリ結果はデフォルトでテーブル ビューに表示されます。 このビューでは、クエリ結果を選択し、クエリから返されたエンティティまたはリレーションシップのプロパティを表示できます。
- 結果テーブルのエンティティ またはリレーションシップ をクリックし、そのプロパティを表示します。
- 必要に応じて [選択セットに追加] を使用して、このレコードを別のコンテンツ アイテムに追加します。
- [選択] 列の [レコードを選択に追加] ボタン を使用し、その行のすべてのエンティティとリレーションシップを選択に追加します。
この行のエンティティとリレーションシップがハイライト表示されます。 他の結果行に表示されるエンティティとリレーションシップのインスタンスもハイライト表示されます。 選択されたレコードの総数がテーブルの一番下に表示されます。
- 必要に応じ:
- Ctrl キーを押しながらエンティティ またはリレーションシップ をクリックすると、そのレコードのみが選択セットから追加されます。
- クエリで返されたすべてのレコードを選択するには、結果メニューの [すべて選択] をクリックします。
- [選択] 列の [選択セットからレコードを削除] ボタン を使用し、その行のすべてのエンティティとリレーションシップを選択セットから削除します。
- 必要に応じ:
- Ctrl キーを押しながらエンティティ またはリレーションシップ をクリックすると、そのレコードのみが選択セットから削除されます。
- 結果メニューの [選択解除] をクリックし、クエリで返されたすべてのレコードを選択します。
- クエリ コンテキスト ツールバーの [選択セットに追加] を使用し、選択されたレコードをリンク チャート、マップ、またはデータ カードに追加します。
マップまたはリンク チャートの結果のプレビュー
クエリ結果のマップ プレビューとクエリ結果のリンク チャート プレビューを使用し、クエリ結果を異なる方法で視覚化してプレビューすることもできます。 テーブル ビューで行われた選択は、マップ プレビューとリンク チャート プレビューに反映されます。
- 結果メニューのマップ ビュー をクリックし、クエリで返された空間エンティティのプレビューを表示します。
- 結果メニューのリンク チャート ビュー をクリックし、リンク チャートで視覚化されたクエリ結果のプレビューを表示します。
- 結果メニューのテーブル ビュー をクリックし、デフォルトの結果テーブルに戻ります。