ナレッジ グラフを検索して、ナレッジ グラフに含まれるエンティティとリレーションシップのサブセットを見つけて、さまざまなエンティティが接続している状況を示すことができます。 以下の例をご参照ください。
- 感染症の拡大を表すナレッジ グラフから、所定の施設とのリレーションシップを通して、関連する人間と動物を扱います。
- 製造サプライ チェーンを表すナレッジ グラフから、サプライヤー、配達方法、倉庫などの特定の部分に関連付けられたコンテンツを扱います。
- 組織を表すナレッジ グラフから、所定のタイプのデバイスを扱い、そのプロパティ (担当従業員の名前など) を表示します。
ナレッジ グラフを検索することにより、エンティティとリレーションシップのサブセット、またはそのプロパティのサブセットを特定できます。 openCypher クエリ言語を使用して openCypher クエリを作成することで、関連するエンティティとそのプロパティを検出し、ナレッジ グラフ、マップ、またはリンク チャートでこの制限された情報を操作します。
調査のコンテンツのクエリ
調査内のナレッジ グラフのエンティティとリレーションシップをクエリできます。
- 「調査を開いて」、そのコンテンツを参照します。
- 調査ビューの上部にある検索テキスト ボックス内をクリックするか、または Ctrl + F キーを押して、[クエリ] をクリックします (必要な場合)。
拡大クエリ ウィンドウが表示されます。 これは、openCypher クエリを書式設定できる複数行のクエリ テキスト ボックスです。
- 検索テキスト ボックスにクエリを入力します。 ポインターを新しい行に移動させて入力を続行するには、Enter キーを押します。
例として、「MATCH (e) RETURN e」というクエリは、許可されている最大数までナレッジ グラフのすべてのエンティティを返します。 このクエリは任意のナレッジ グラフで使用できます。
- [適用] をクリックします。
クエリの結果が調査ビューに表示されます。 クエリで返されたエンティティとリレーションシップは該当するアイコンで識別されます。 拡大クエリ ウィンドウの下部に表示される履歴にクエリが追加されます。
- 拡大クエリ ウィンドウのサイズを変更するには、ウィンドウとコンテンツ リストの間の区切り線をドラッグします。
また、区切り線上のボタンを使用して、すべてのスペースを拡大クエリ ウィンドウまたはコンテンツ リストのどちらかに使用することもできます。
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 (e1:Person)-[r]->(e2) RETURN e1,r,e2 はすべての Person エンティティ e1 を返します。ここでは、任意のリレーションシップ r が Person を別の任意のタイプのエンティティ e2 に接続します。 前の例と比較すると、Pet、Vehicle、または Document エンティティがリレーションシップの起点になるリレーションシップは結果に含まれません。
リレーションシップ タイプとエンティティ タイプをクエリの他のファセットに追加して、特定のリレーションシップ タイプと特定の関連エンティティを考慮するようにクエリを制限できます。 例として、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 より前の値である場合のみ考慮されます。
openCypher クエリ言語の詳細については、「openCypher Implementers Group が提供するドキュメント」をご参照ください。 ArcGIS Knowledge は openCypher クエリ言語のすべての部分をサポートしているわけではありません。 たとえば、クエリを使用してナレッジ グラフを更新することはできず、値を返すだけです。
ArcGIS Pro の openCypher については、「ヒストグラムを構築する」ためのデータをナレッジ グラフから取得するクエリをご参照ください。 [検索とフィルター] ウィンドウの [ヒストグラム] タブ で、[設定] ボタン をクリックして [クエリ タブにクエリを送信] をクリックします。 現在のヒストグラム セットのデータを取得するためのクエリが [クエリ] テキスト ボックスに表示されます。
クエリ結果の変更と更新
特定のグラフ アイテム タイプと特定のプロパティ値を評価して、調査で焦点を絞ったエンティティとリレーションシップのセットを取得できます。
- 拡大クエリ ウィンドウ内をクリックするか、Ctrl + F キーを押します。
- 既存の 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 キーを押して、複数行のテキスト ボックスでポインターまたはクエリのテキストの一部を新しい行に移動させます。 わかりやすくするために行を必要なだけ使用します。
- [適用] をクリックして新しい結果を取得します。
クエリの結果が調査に表示されます。 クエリで返されたエンティティとリレーションシップは該当するアイコンで識別されます。 拡大クエリ ウィンドウの下部に表示される履歴にクエリが追加されます。
- [解除] をクリックして、現在のクエリのテキストを拡大クエリ ウィンドウから削除します。
最近実行した 3 つのクエリが拡大クエリ ウィンドウの下部にリストされます。 最近使用したクエリの結果は削除されません。
- クエリ履歴からクエリを再実行するか、削除します。
- リストにあるクエリをクリックして、そのクエリを再実行します。
選択したクエリがクエリ テキスト ボックスに表示されて、自動的に実行され、結果が調査に表示されます。
- リスト内の特定のクエリに対して [履歴から削除] ボタン をクリックして、そのクエリを履歴から削除します。
指定したクエリがリストから削除されます。 クエリ履歴が更新され、最近使用した 3 つのクエリが表示されます。
- リストにあるクエリをクリックして、そのクエリを再実行します。
クエリの保存
クエリを記述、変更、実行すると、クエリの履歴が維持されます。 ただし、クエリの履歴全体はプロジェクトで保存されません。 調査の一部として維持しておきたいクエリを個別に保存することができます。
- [クエリ] ドロップダウン矢印をクリックして、[<新しいクエリ>] をクリックします。
- クエリ テキスト ボックスをクリックし、新しいクエリを入力するか、既存のクエリを変更します。
- [適用] をクリックします。
クエリの結果が調査に表示されます。
- 拡大クエリ ウィンドウの上部にある [保存] をクリックします。
[クエリに名前を付けて保存] ダイアログ ボックスが表示されます。
- [調査] プロジェクト コンテナー → 自分の調査 → [コレクション] フォルダー → [クエリ] フォルダーの順に参照します。 [名前] テキスト ボックスにクエリの名前を入力して、[保存] をクリックします。
クエリが調査のクエリ フォルダーに保存されます。 保存済みクエリが、[クエリ] ドロップダウン リストで自動的に選択されます。
- クエリ テキスト ボックスをクリックし、既存のクエリを変更します。
- 拡大クエリ ウィンドウの上部にある [保存] をクリックして、変更が反映されるように保存済みクエリを更新します。
- クエリ テキスト ボックスをクリックし、既存のクエリを変更します。
- 拡大クエリ ウィンドウの上部にある [保存] をクリックして、新しいクエリとして変更を保存します。
- [調査] プロジェクト コンテナー → 自分の調査 → [コレクション] フォルダー → [クエリ] フォルダーの順に参照します。 [名前] テキスト ボックスにクエリの名前を入力して、[保存] をクリックします。
- リボンの [プロジェクト] タブをクリックし、[保存] をクリックして、調査とクエリをプロジェクトに保存します。
- 保存済みクエリを実行します。
- 調査の [コンテンツ] ウィンドウで保存済みクエリをクリックします。
- [クエリ] ドロップダウン リストをクリックして、保存済みクエリをクリックします。
保存済みクエリがクエリ テキスト ボックスに表示されて、自動的に実行されます。 クエリ結果が調査に表示されます。
検索とフィルター ウィンドウでナレッジ グラフをクエリ
[検索とフィルター] ウィンドウを使用すると、調査ビューではビューのコンテンツのクエリ、マップではナレッジ グラフ レイヤーのコンテンツのクエリ、リンク チャートではチャートに記述されるエンティティとリレーションシップのクエリを行うことができます。
- 次のいずれかの方法で、[検索とフィルター] ウィンドウを開きます。
調査から
リボンの [調査] タブの [検索] グループで、[検索とフィルター] をクリックします。
マップから
マップの [コンテンツ] ウィンドウでナレッジ グラフ レイヤーをクリックします。 [ナレッジ グラフ レイヤー] コンテキスト タブをクリックします。 [検索] グループで [検索とフィルター] ボタン をクリックします。
リンク チャートから
リボンの [リンク チャート] タブの [検索] グループで、[検索とフィルター] をクリックします。
[検索とフィルター] ウィンドウが表示されます。
- [ソース] ドロップダウン リストをクリックし、クエリ対象のナレッジ グラフを含む調査、マップ レイヤー、またはリンク チャートをクリックします。
- [クエリ] タブ をクリックします。
[検索とフィルター] ウィンドウで開いている調査、マップ レイヤー、またはリンク チャートをペアリングすると、ペアリングされたビューに関連付けられたナレッジ グラフ全体に対してすべてのクエリが評価されます。 クエリはペアリングされたビューで利用可能なコンテンツに限定されていないことを示すメッセージが表示されます。
- [クエリ] テキスト ボックスに新しいクエリを定義します。
openCypher クエリを入力します。
[クエリ] ドロップダウン矢印をクリックして、保存済みクエリをクリックします。
- [適用] をクリックします。
検索結果が [結果] リストに表示されます。
ヒント:
ナレッジ グラフは多数のエンティティとリレーションシップを表現できます。 [検索とフィルター] ウィンドウの下部にあるビジー インジケーターに、結果リストが生成中であることが表示されます。 ArcGIS Pro が終了すると、ビジー インジケーターが停止し、[結果の更新] ボタン が表示されます。 クエリの結果を返すのに時間がかかりすぎる場合は、ビジー インジケーターをクリックして結果リストの構築を停止できます。
デフォルトでは、[検索とフィルター] ウィンドウがクエリの結果を探索するには狭すぎる場合があります。 メインの ArcGIS Pro アプリケーション ウィンドウで他のビューおよびウィンドウの配置に影響することなく、ウィンドウのドッキングを解除して拡張することができます。
クエリ結果の探索
openCypher クエリはさまざまな結果を返すことができます。 クエリがエンティティまたはリレーションシップのリストを返す場合、それらは結果リストに行あたり 1 つのエンティティまたはリレーションシップで表示されます。 クエリで返された値が、クエリで示され、ラベル付けされた列に表示されます。
openCypher クエリが、どのエンティティが別のエンティティと特定のリレーションシップを持つかを示す結果を返すことがあります。 この場合、結果リストには 3 つ組ごとに 1 つの行があります。3 つ組は起点エンティティ、リレーションシップ、終点エンティティで構成されます。 例として、MATCH (p:Person)-[r]->(e) RETURN p,r,e というクエリは、結果内の各行が人、その人と別のエンティティ間のリレーションシップ、そのリレーションシップの終点エンティティを表す結果リストを返します。 この場合、結果リストには、p というタイトルの人の列、r というタイトルのリレーションシップの列、e というタイトルの終点エンティティの列があります。
代わりに、クエリがエンティティまたはリレーションシップの特定のプロパティを返す場合、結果リストでは、クエリによって決定された適切な名前の列にこれらの値が表示されます。 たとえば、MATCH (p:Person)-[ :HasVehicle]->(v) RETURN p,v,v.year というクエリは、p 列に Person エンティティの表示名、v 列に Vehicle エンティティの表示名、v.year 列に Vehicle エンティティの year プロパティの値をそれぞれ返します。 クエリが返した特定のプロパティの値がエンティティにない場合、「null」値が表示され、表示する値がないことが示されます。
次の例は、人が車両との HasVehicle リレーションシップに属している Person エンティティを返すクエリを示しています。 このクエリは、HasVehicle リレーションシップの acquisitionDate プロパティと Vehicle エンティティの make プロパティも返します。
エンティティ またはリレーションシップ を含む列に、グラフ アイテムの表示名とそのアイコンが表示されます。 上記のスクリーン ショットでは、返された Person エンティティが p 列に表示されています。 HasVehicle リレーションシップの acquisitionDate プロパティは hv.acquisitionDate 列に表示されています。 Vehicle エンティティの make プロパティの値は v.make 列に表示されています。
調査からナレッジ グラフをクエリする場合、詳細パネルを使用して、選択したエンティティまたはリレーションシップのプロパティを表示します。 詳細パネルからは、クエリ結果に含まれていない他のリレーションシップや関連エンティティを探索できます。
[検索とフィルター] ウィンドウからナレッジ グラフをクエリする場合、[ヒストグラム] タブ を使用して、結果を集約してフィルターします。 タブの上部にあるタイトルが [ヒストグラム - クエリ] に変更され、チャートはペアリングされたビューのコンテンツではなく、[クエリ] のクエリにより返されたコンテンツを表示していることが示されます。 また、クエリはビューのナレッジ グラフに対して評価されているため、ヒストグラムにはペアリングされたビューから利用できないコンテンツが含まれている可能性があることを示すメッセージが表示されます。
調査または [検索とフィルター] ウィンドウから、対象のエンティティまたはリレーションシップを選択し、選択したグラフ アイテムを右クリックします。 利用可能なオプションを使用して、今後の解析のために、選択したグラフ アイテムを新規または既存のマップまたはリンク チャートに追加します。 あるいは、既存の調査、マップ、またはリンク チャートで対応するアイテムを選択します。