クエリの作成

クエリを作成する際は、標準提供のクエリ ビルダを使うだけでなく、カスタム クエリを作成することもできます。

[クエリ] ドロップダウンに一覧表示されている既存のクエリから選択、または変更することもできます。既存のクエリを変更する際は、変更を保存して既存のクエリを上書きする (同じ名前を使用する) か、変更したクエリに新しい名前を付けて変更を保存する必要があります。それ以外の場合、変更はカスタム クエリとして一時的に保存され、[モデル管理] ではなく [モデルを開く] からのみアクセス可能になります。元のクエリは変更されません。新しいカスタム クエリを使用できるのは、このアプリケーションが開かれている間、またはそのモデルに対して異なるクエリを使用するまでです。モデルに異なるクエリを適用するか、このアプリケーションを閉じた場合、クエリに対する変更は失われます。
クエリ ビルダを使う手順は次のとおりです。
  1. クエリ結果に含める [要素を選択] するか、クエリ結果に含める [要素を追加] するか、キャンバス上の結果をハイライトして [結果を表示] するかを選択します。
  2. クエリの各ステップからの結果を含める場合は、[部分的な追跡から取得した結果を含める] のチェック ボックスをオンにします。最後のステップの要件を満たす結果のみを含める場合は、このチェック ボックスをオフのままにします。例えば、2001 年 9 月 11 日に至るまでのイベントに関する世界規模のテロ活動を表すモデルを参照しており、Osama bin Laden と Mohamed Atta の両者が参加したミーティングに関するデータを取得したいとします。クエリは、例えば次のステップで構成されます。
    • _stp_id プロパティのリテラル値が "Person:Osama bin Laden" に完全一致するエンティティを検索する最初のステップ
    • エンティティから関連性の間で "Meeting" という関連性ラベルによる接続を検索するステップ
    • 関連性からエンティティの間で _stp_id プロパティに "Atta" を含むという条件で接続を検索するステップ
    [部分的な追跡から取得した結果を含める] のチェック ボックスをオフにする場合は、このクエリによって、Osama bin Laden と Mohamed Atta の間の 1 つのミーティングが返されます。このチェック ボックスをオンにする場合は、Osama bin Laden とモデル内のそれ以外の人物との間のすべてのミーティングが返されます。追加のレコードが返されるのは、2 つめのステップで Osama bin Laden が参加したミーティングが検索され、チェック ボックスをオンにしたことから、クエリの各ステップからの結果が返されるためです。
  3. 各走査で複数回出現する要素を含めるには、[循環走査による結果を含める] チェックボックスをオンのままにします。これらの要素を各走査で 1 回だけ含めるには、このチェックボックスをオフにします。例えば、ステップ 1 と同じモデルを使用している場合に、最初は Mohamed Atta が参加したミーティングのデータを検索していたが、その結果が得られた後に、特定のミーティングに対するすべての参加者を確認したいと思ったとします。クエリは、例えば次のステップで構成されます。
    • _stp_id プロパティのリテラル値が "Person:Mohamed Atta" に完全一致するエンティティを検索する最初のステップ。Mohamed Atta のエンティティが返されます。
    • エンティティから関連性の間で "Attended" という関連性ラベルによる接続を検索するステップ。Kandahar でのミーティングを含む、Mohamed Atta が参加したすべてのイベントが返されます。
    • 関連性からエンティティの間で Event プロパティに "Kandahar" を含むという条件で接続を検索するステップ。Kandahar ミーティングだけが返されます。
    • エンティティから関連性の間で "Attended" という関連性ラベルによる接続を検索するステップ。Kandahar でのミーティングに参加した他の 3 人のエンティティに接続される関連性が返されます。Mohamed Atta に接続される (走査済みの) 関連性が返されるかどうかは、このオプションを使用するかどうかによって決まります。
    [循環走査による結果を含める] チェックボックスをオンにした場合は、Mohamed Atta の関連性が他の 3 人の参加者の関連性とともに返されます。このチェックボックスをオフにした場合は、Mohamed Atta の関連性は返されません。その関連性 (Person:Mohamed Atta->Attended->Meeting:Kandahar) は、クエリの最初のステップで既に走査済みであるためです。
  4. [結果数の上限値] チェックボックスをオンにして、クエリによって返されるエンティティと関連性の合計最大数を指定する数値を入力します。デフォルトは 5000 です。ここに入力した数値は一意の要素に適用されます。したがって複数の結果に同じ要素が出現する場合、それらは 1 つの結果としてカウントされます。このような状態を回避するには、このトピックの最後に記載されている dedup 関数を使用します。この関数は、出力における重複する結果を削除します。ルート ステップでリストが返され、大きなモデルに対してクエリを実行している場合は、サーバーが応答不能になるのを避けるためにこのフィールドに上限値を入力しておくことを強く推奨します。
    注: 上限値はここ以外に、Relationship Analysis Client の [全般設定] の[クエリ結果の制限] で設定可能です。両者の値が異なる場合は、低い方の値が採用されます。
  5. [選択] タブに必要な情報を入力します。
    • [すべてのエンティティ][すべての関連性]、または [開始エンティティの指定] をクリックして、クエリで何を特定するかを指定します。[開始エンティティの指定] を選択すると、モデル内のどのポイントで検索を開始するかを決定できます。例えば、特定の期間にわたる世界のテロ活動を表現するモデルを対象とする場合、エンティティは国の名前になるでしょう。このときモデル全体をクエリの対象とするのではなく、アフガニスタンにおける活動だけに注目したいことがあります。このような場合、[検索タイプ] として "すべて" を選択し、[プロパティ名] として "国" を選択し、[リテラル] はオンのままにし、[プロパティ値] として "アフガニスタン" を入力します。
      注: [プロパティ値] フィールドの値は、フィールドにインデックスを付けるときに [完全一致] タイプが選択されていた場合 ([大文字と小文字を区別しない] が選択されていなかった場合)、大文字と小文字が区別されます。フィールドにインデックスを付ける際のタイプ選択の詳細については、「[エンティティ] タブ」を参照してください。
      また、[フィールド] をクリックし、[プロパティ値] として "場所" を選択すれば、個別に値を入力しなくても済みます。フィールドを選択した場合、そのフィールド名を含む [入力データ] グリッドが、クエリ名の下に、デフォルト値を入力できるセルと共に表示されます。このクエリをどこかで再利用する場合は、このステップで入力したデフォルト値を使用することも、その時にデフォルト値を上書きすることもできます。
    • [すべてのエンティティ] または [開始エンティティの指定] をクリックした場合は、クエリのエンティティ タイプを選択します。選択した特定のタイプまたはすべてのタイプに対するクエリを選択できます。[選択なし] をクリックすると、タイプの選択がすべて解除されます。エンティティ タイプを選択すると、結果が絞り込まれて返されるだけでなく、クエリの最初のステップで使用できるプロパティやフィールド、クエリの後のステップで使用できる方向、エンティティ タイプ、関係性ラベルなど、他の要素にも影響を与えます。
    • [開始エンティティの指定] をクリックしたら、次のいずれかの [検索タイプ] を選択します。
      完全一致 大文字と小文字の区別も含め、[選択] タブに入力したデータと完全に一致するデータのインデックスを検索します。フィールドにインデックスを付けるときに [完全一致] タイプが選択されていた場合、プロパティ値の大文字と小文字は区別されます。大文字と小文字の区別が使用されていると、"texas" を検索してもデータに含まれる "Texas" という項目とは一致しません。
      が次の値で始まる [選択] タブに入力した文字で始まるテキストの含まれるデータのインデックスを検索します。完全な語句を入力しなくてもかまいません。例えば、リテラル プロパティ値 "tech" または "tec" は、プロパティ値 "Technical"、"Technology"、"Technologies"、"Technician" と一致すると見なされます。
      次で終わる [選択] タブに入力した文字で終わるテキストの含まれるデータのインデックスを検索します。完全な語句を入力しなくてもかまいません。例えば、リテラル プロパティ値 "Emirates" または "tes" は、プロパティ値 "United Arab Emirates" と一致すると見なされます。
      が次の値を含む [選択] タブに入力したテキストの含まれるデータのインデックスを検索します。完全な語句を入力しなくてもかまいません。例えば、リテラル プロパティ値 "Pitney" や "Pitney Bowes" は、プロパティ値 "Pitney Bowes Software Inc." と一致すると見なされます。
      いずれか [選択] タブに入力したテキストのいずれかの語句が含まれるデータのインデックスを検索します。例えば、リテラル プロパティ値 "Austin Tex"は、プロパティ値 "Texarkana" と "Stephen F.Austin University" のどちらとも一致すると見なされます。
      All [選択] タブに入力したテキストのすべての語句が含まれるデータのインデックスを検索します。例えば、リテラル プロパティ値 "Allstate claim 2013" や "all state" や "all 13" は、プロパティ値 "filed claim with Allstate June 2013" と一致すると見なされます。
      範囲 [選択] タブに入力した範囲内のデータのインデックスを検索します。この検索タイプを使用する場合は、日付、時間、日付/時間、または数値のデータ タイプが含まれるプロパティ名を選択する必要があります。数値データ タイプとしては、BigDecimal を除くすべてのデータ タイプがサポートされます。例えば、次のように指定すると、"StartDate" の値が 2000 年の範囲内であるすべてのエンティティが返されます。
      • プロパティ名 "StartDate" で日付タイプのプロパティ
      • リテラル開始値 "1/1/2000"
      • リテラル終了値 "12/31/2000"
      あいまい

      [選択] タブに入力したテキストのインデックスを検索しますが、多少の差異 (一部の文字の有無や違い) を許容します。一致と見なされる差異の許容量は、[メトリクス] フィールドの入力値に左右されます。この値は、0 より大きく、1 より小さい値、つまり、"0.1" ~ "0.9" の値にします。例えば、メトリクスが "0.9" の場合に "Barton" を検索すると、"Barton" と 1 文字だけ異なる "Carton" (B の代わりに C)、"Bartons" (s が多い)、"Baton" (r がない) という値のレコードもすべて返されます。

      ワイルドカード
      [選択] タブに入力したテキストのインデックスを検索しますが、1 文字のワイルドカード文字、または、ひとつなぎのワイルドカード文字列を許容します。サポート対象のワイルドカード文字には、任意の 1 文字に一致する疑問符 (?) と、(空白を含む) 任意の文字列に一致するアスタリスク (*) があります。例えば、テキサス州で "Aus*" という都市を検索すると、"Austin"、"Austonio"、"Austwell" のレコードが検索結果として返されます。"Aust??" で同様の検索を実行すると、"Austin" だけが返されます。疑問符はそれぞれ 1 文字を表し、他の2 つの都市名は文字数がそれよりも長いためです。
      注: アスタリスクのワイルドカードを検索文字列の先頭文字としてクエリを実行すると、応答に時間がかかる可能性があります。
    • [開始エンティティの指定] をクリックしたら、ドロップダウン リストから [プロパティ名] を選択します。このリストには、モデルを構成するエンティティと関連性に関連付けられているすべてのプロパティが含まれます。
      注: クエリ可能なプロパティは、インデックスが付けられたプロパティだけです。インデックスが付けられていないプロパティは、[プロパティ] ドロップダウンに表示されません。
    • [開始エンティティの指定] をクリックし、"範囲" 以外の検索タイプを選択した場合は、[プロパティ値] を選択します。[リテラル] をクリックすると、検索に使うテキスト文字列を入力できます。また、[フィールド] をクリックすると、データを検索するフィールドを選択できます。このオプションを選択した場合、[入力データ] グリッドにも値を入力する必要があります。
    • [開始エンティティの指定] をクリックし、"範囲" の検索タイプを選択した場合は、[開始値] と [終了値] を選択して範囲を入力します。[リテラル] をクリックすると、検索に使う値を入力できます。また、[フィールド] をクリックすると、データを検索するフィールドを選択できます。このオプションを選択した場合、[入力データ] グリッドにも値を入力する必要があります。
  6. クエリにその他の制約を設定する場合は、[条件] タブに必要な情報を入力します。[条件] タブには、4 つの入力フィールドがあります。
    1. 最初の条件を作成している場合、[論理演算子] フィールドは空のままです。以降の条件を作成している場合は、この条件を前の条件と併用するか ("And")、前の条件の代わりに使用するか ("Or") を指定します。
    2. 条件のベースとなるプロパティを [データ ソース] フィールドで選択します。
    3. 条件の演算子として、データ タイプに適したものを [演算子] フィールドで選択します。
      が次に等しい
      プロパティ値が [値] フィールドの入力値と完全に一致するモデル要素を検索します。数値またはテキスト値を指定できます。
      が等しくない
      プロパティ値が [値] フィールドの入力値と異なるモデル要素を検索します。数値またはテキスト値を指定できます。
      が存在する
      [データ ソース] フィールドで選択したプロパティを持つモデル要素を検索します。
      Does not Exist
      [データ ソース] フィールドで選択したプロパティを持たないモデル要素を検索します。
      が空白
      プロパティにデータが含まれていないモデル要素を検索します。プロパティ値が空白である要素が返されます。数値またはテキスト値を指定できます。
      Is Not Blank
      プロパティにデータが含まれるモデル要素を検索します。プロパティ値が空白でない要素が返されます。数値またはテキスト値を指定できます。
      次の値より大きい
      プロパティ値が指定した値よりも大きいモデル要素を検索します。数値、日付値、日付/時刻値、または時刻値を指定できます。
      次の値以上
      プロパティの数値が指定した値以上であるモデル要素を検索します。数値、日付値、日付/時刻値、または時刻値を指定できます。
      次の値より小さい
      プロパティの数値が指定した値よりも小さいモデル要素を検索します。数値、日付値、日付/時刻値、または時刻値を指定できます。
      次の値以下
      プロパティの数値が指定した値以下であるモデル要素を検索します。数値、日付値、日付/時刻値、または時刻値を指定できます。
      が次の値を含む
      プロパティの値が [データ ソース] フィールドの入力値を含むモデル要素を検索します。完全な語句を入力しなくてもかまいません。例えば、リテラル プロパティ値 "Pitney" や "Pitney Bowes" は、プロパティ値 "Pitney Bowes Software Inc." と一致すると見なされます。数値またはテキスト値を指定できます。
      が次の値を含まない
      プロパティの値が [データ ソース] フィールドの入力値を含まないモデル要素を検索します。完全な語句を入力しなくてもかまいません。例えば、リテラル プロパティ値 "Pitney" や "Pitney Bowes" は、プロパティ値 "Pitney Bowes Software Inc." と一致するとみなされるため、"Pitney Bowes Software Inc." は返されません。数値またはテキスト値を指定できます。
      が次の値で始まる
      プロパティの値が [データ ソース] フィールドに入力したテキストで始まるモデル要素を検索します。例えば、LastName フィールドに対して "Van" と入力すると、"Van Buren"、Vandenburg"、または "Van Dyck" といった結果が返されます。
      が次の値で始まらない
      プロパティの値が [データ ソース] フィールドに入力したテキストで始まらないモデル要素を検索します。例えば、LastName フィールドに対して "Van" と入力すると、"Van Buren"、Vandenburg"、"Van Dyck" などは返されませんが、"Eddie Van Halen" という結果は返されます。
      次で終わる
      プロパティの値が [データ ソース] フィールドに入力したテキストで終わるモデル要素を検索します。例えば、City フィールドが "burg" で終わるレコードをフィルタリングする場合、"Gettysburg"、"Fredricksburg"、"Blacksburg" といった結果が返されます。
      Does Not End With
      プロパティの値が [データ ソース] フィールドに入力したテキストで終わらないモデル要素を検索します。例えば、City フィールドが "burg" で終わるレコードをフィルタリングする場合、"Gettysburg"、"Fredricksburg"、"Blacksburg" などは返されませんが、"Burgess" という結果は返されます。
      正規表現に一致
      プロパティの値が [データ ソース] フィールドに入力した正規表現にマッチするモデル要素を検索します。正規表現マッチでは、対象テキストの文字列 (特定の文字、単語、文字のパターンなど) を正規表現と照合します。値フィールドには、有効な正規表現パターンが含まれる必要があります。
      次とほぼ類似する
      [データ ソース] フィールドの入力値にプロパティ値が近いモデル要素を検索しますが、多少の差異 (一部の文字の有無や違い) を許容します。この演算子は、検索メトリクスを 0.5 に設定した場合の [あいまい] 検索タイプと等価です。
      Is Similar To
      [データ ソース] フィールドの入力値にプロパティ値が近いモデル要素を検索しますが、多少の差異 (一部の文字の有無や違い) を許容します。この演算子は、検索メトリクスを 0.6 に設定した場合の [あいまい] 検索タイプと等価です。
      次とかなり類似する
      [データ ソース] フィールドの入力値にプロパティ値が近いモデル要素を検索しますが、多少の差異 (一部の文字の有無や違い) を許容します。この演算子は、検索メトリクスを 0.7 に設定した場合の [あいまい] 検索タイプと等価です。
    4. 演算子のリストの後にあるドロップダウン ボックスで次の操作を行います。
      • [リテラル] を選択して、4 番目のボックスである [値] フィールドに、クエリで使用するテキスト文字列を入力します。
      • [フィールド] を選択してから、データを検索するフィールドを [値] フィールドで選択します。
      • 前のステップ ("Root" または "Step1" など) を選択してから、[値] フィールドのプロパティを選択して、現在のステップのプロパティ値を前のステップで返された値と比較します。(前のステップの [出力] タブで出力に名前を付けた場合、その名前が "Root" や "Step1" の代わりに表示されることに注意してください)。このケースでは、[値] フィールドに表示されるプロパティは、前のステップのプロパティに基づきます。例えば、あるイベント (Kandahar での会議) の参加者の 1 人の名前 (Mohamed Atta 氏) はわかるが他の参加者が不明な場合、プロパティ値を比較する次のようなクエリを作成できます。
        • "Mohamed" が含まれる _stp_id でエンティティ タイプ Person を検索するルート ステップ
        • "Attended" という関連性ラベルを使う、エンティティから関連性ステップ
        • "Kandahar" が含まれるイベントがある条件を使う、関連性からエンティティ ステップ
        • エンティティから関連性の間の "Attended" という関連性ラベルを検索するステップ。ただし、このステップの _stp_id 値がルート ステップで見つかった _stp_id 値とは異なることを条件とする。
        このクエリを実行すると、Mohamed Atta 氏が Kandahar でのイベントに出席し、さらに _stp_id 値が "Mohamed" ではない他の 3 人の人物もこのイベントに出席していたことがわかります。
    5. クエリ結果で大文字と小文字を区別しない場合は、[大文字と小文字を区別しない] をクリックします。
    6. 上記のステップを繰り返して他の条件を追加します。
    7. [OK] をクリックします。
    例えば、2001 年から 2010 年までのアフガニスタンにおけるテロ活動を対象とする場合は、2 つの条件を作成します。最初に、"日付" を [プロパティ名] として選択し、"が次の値以上" を選択し、[リテラル] をオンのままにして、"2001" と入力します。次の条件も同様で、"And"、"日付"、"が次の値以下"、"2010" というように設定します。または、[フィールド] をクリックし、"日付" を選択すれば、個別に値を入力しなくても済みます。条件の追加、削除、順序変更は、条件の横にあるどちらかのアイコンを使って行います。クエリ結果で大文字と小文字を区別しない場合は、[大文字と小文字を区別しない] をクリックします。
  7. 出力方法を指定するには、[出力] タブに必要な情報を入力します。
    • このステップの結果を出力に含めたければ、[結果を含める] チェック ボックスをクリックします。
      注: どのシリーズでもこのボックスは最後のステップでオンにします。したがって、ステップが 1 つしかない場合は、このボックスをオフにできません。
    • [名前を指定] をクリックし、[名前] フィールドにテキストを入力して、出力に含めるこのステップの名前を指定します。この入力を階層出力のフィールドの名前とタイプに使用するには、[リスト] をオンにします。この入力をすべての出力フィールドの接頭辞として追加するには、これをオフのままにします。ステップ 3 の例を用いて、このステップを "Afghanistan" という名前にするとします。このステップの出力フィールドの名前は、"Afghanistan.Latitude" や "Afghanistan.Date" になります。
    • 出力でこのステップの名前としてフィールド タイプを使用するには、[タイプ名を使用] をクリックします。エンティティにはエンティティ タイプが使用され、関係性には関係性のラベルが使用されます。また同じ例を用いた場合、これを選択すると、出力フィールドの名前は "Person.Latitude" や "Person.Date" になります。このオプションを選択し、[名前] フィールドに名前を入力すると、すべての出力フィールドのフィールド タイプに加えて、指定した名前が接頭辞として追加されます。また同じ例を用いた場合、これを選択すると、出力フィールドの名前は、"Afghanistan.Person.Latitude" や "Afghanistan.Person.Date" になります。
  8. クエリに実行させたい手順を指定します。具体的には、[操作の追加] ドロップダウン ボックスで、適切なオプションを選択します。[フロー] タブ、[条件] タブ、[出力] タブでもこのステップを完了できます。選択するオプションは、ルート要素がエンティティか関連性かによって異なることに注意してください。
    • [エンティティ間] ([すべてのエンティティ] と [開始エンティティの指定] で有効) を選択した場合は、2 エンティティ (接続)、前エンティティ (先行)、または後エンティティ (後続) の間の関連性ラベルに基づいて、検索結果を絞り込んでデータを返すことができます。例えば、家族メンバーのモデルでクエリを実行していて、関連性ラベルとして "父" を選択すると、接続クエリはエンティティ間に "父" ラベルがあるすべてのエンティティ (つまり、父、息子、娘) を返します。先行クエリは、"父" という関連性で別のエンティティに接続するときのソース エンティティとなるすべてのエンティティ (つまり、父) を返します。後続クエリは、"父" という関連性で別のエンティティに接続するときのターゲット エンティティとなるすべてのエンティティ (つまり、息子と娘) を返します。

      クエリのルート ステップと同様に、クエリのこのステップでもエンティティ タイプを選択できます。選択した特定のタイプまたはすべてのタイプに対するクエリを選択できます。[選択なし] をクリックすると、タイプの選択がすべて解除されます。

    • [エンティティから関連性へ] ([すべてのエンティティ] と [開始エンティティの指定] で有効) を選択した場合、使用できるオプションは [エンティティ間] の場合とよく似ています。2 エンティティ (接続)、前エンティティ (先行)、または後エンティティ (後続) の間の関連性ラベルに基づいて、検索結果を絞り込んでデータを返すことができます。このクエリに条件を追加して出力を定義することもできます。

    • [関連性からエンティティへ] ([すべての関連性] で有効) を選択した場合は、自分の設定する条件に基づいて検索結果を絞り込むことができます。データを取得できるのは、条件が成立したときのそのエンティティが別のエンティティに接続されたエンティティ(接続)である場合か、そのエンティティ自体がソースとして別の関連性(先行)を持つ場合か、そのエンティティが関連性(後続)のターゲットである場合です。クエリのルート ステップと同様に、クエリのこのステップでもエンティティ タイプを選択できます。選択した特定のタイプまたはすべてのタイプに対するクエリを選択できます。[選択なし] をクリックすると、タイプの選択がすべて解除されます。
    追加する操作のタイプに関係なく、その操作の条件を作成できます。このステップの出力の表示方法も定義できます。ルート ステップ以降のステップには、出力のパスが指定されます。パスとステップ名で出力データの階層が定義されます。ルート ステップで [リスト] ボックスをオンにした場合、このパスは、デフォルトで、前のステップのパスの一部になります。ただし、ルート ステップの名前を削除することもできます。例えば、ルート ステップを "Locations" という名前にし、[リスト] ボックスをオンにした場合、最初のステップでは、[パス] フィールドにデフォルトで "/Locations" と表示されます(また、"Locations" を削除してスラッシュのみにし、このステップをルートで開始することもできます)。最初のステップの名前を "CountryName" とした場合、2 番目のステップでは、[パス] フィールドにデフォルトで "/Locations/CountryName" と表示され、"Locations" のフィールド出力に CountryName の結果のリストが含まれます。このステップの結果を出力に含めたければ、[結果を含める] チェック ボックスをクリックします。クエリの出力から重複する結果を削除する場合は、[重複除外] をクリックします。
  9. [OK] をクリックします。