メインコンテンツまでスキップ

フィルタとソート

Satcat SDKでの「一覧表示」機能では、特定の結果を取得するためのフィルタリングおよびソート機能を、APIを介して利用できます。この関数は、list_というフレーズで始まるのが特徴で、例えばlist_conjunctionslist_screeningsなどがあります。

フィルタは1つ以上指定可能で、複数のフィルターを指定した場合、すべての条件に一致する結果のみが返されます。


フィルタフィールド

フィルタは、list_関数が返すモデルの任意のフィールドに対して使用できます。

    def list_screenings(
...
) -> Collection[models.Screening]:

例えば、上のような関数を入力すると、 ScreeningモデルのCollectionを返します。この時、Screeningモデルの任意のフィールド(例:conjunctions_countcreated_at)を、フィルタとして使用できます。 フィルタを適用するには、フィールド名を文字列として"field"パラメーターに指定します。


フィルターの形式

各フィルターはPythonのdict(辞書)として指定され、次のフィールドに対応しています:

  • "field": フィルタの対象となるモデル上のフィールド名。例えば、Conjunctionモデルでは、"collision_probability"フィールドを指定できます。
  • "value": 指定した"field"に対して"op"で指定した演算子を適用する際に使用する検索値を指定します。
  • "op" (任意、デフォルトは"eq"): フィルタの比較方法を定義する演算子を指定します。次のいずれかの値を使用できます。
    • "is_null": フィールドの値がnullの結果を返します。¥"value"は省略可能で、無視されます。
    • "is_not_null": フィールドの値がnullでない結果を返します。"value"は省略可能で、無視されます。
    • "eq": フィールドの値が"value"と等しい結果を返します。
    • "ne": フィールドの値が"value"と等しくない結果を返します。
    • "gt": フィールドの値が"value"より大きい結果を返します。
    • "lt": フィールドの値が"value"より小さい結果を返します。
    • "ge": フィールドの値が"value"以上の結果を返します。
    • "le": フィールドの値が"value"以下の結果を返します。
    • "like": フィールドの値が"value"に部分的に一致(大文字・小文字を区別)する結果を返します。ワイルドカードに%が使用できます。
    • "ilike": フィールドの値が"value"に部分的に一致(大文字・小文字を区別しない)する結果を返します。ワイルドカードに%が使用できます。

フィルターの例

スクリーニングから、衝突確率が5e-10以上の接近事象を取得する例:

cdms = client.screening.list_conjunctions(
screening_id,
filters=[
{"field": "collision_probability", "op": "ge", "value": 5e-10},
]
)

スクリーニングから、衝突確率がnullで、最接近距離が1キロメートル未満の接近事象を取得する例:

cdms = client.screening.list_conjunctions(
screening_id,
filters=[
{"field": "collision_probability", "op": "is_null"},
{"field": "miss_distance_km", "op": "le", "value": 1.0},
]
)

ステータスがSUCCESSのスクリーニングを取得する例:

cdms = client.screening.list_screenings(
filters=[
{"field": "status", "op": "eq", "value": "SUCCESS"},
]
)

ソート

一覧表示機能では、sort_fieldおよびsort_directionパラメーターを使用して、モデル内の任意のフィールドで並べ替えを行うこともできます。例えば:

created_atで昇順にソートされたスクリーニングを取得する場合:

cdms = client.screening.list_screenings(
sort_field="created_at",
sort_direction="asc"
)

スクリーニングから、衝突確率で降順にソートされた衝突事象を取得する場合:

cdms = client.screening.list_conjunctions(
screening_id,
sort_field="collision_probability",
sort_direction="desc"
)

ソートとフィルタの併用

もちろん、ソートとフィルターは同時に使用できます。例えば:

スクリーニングから、衝突確率が5e-10以上で、衝突確率で降順にソートされた接近事象を取得する場合:

cdms = client.screening.list_conjunctions(
screening_id,
filters=[
{"field": "collision_probability", "op": "ge", "value": 5e-10},
],
sort_field="collision_probability",
sort_direction="desc"
)