フィルタとソート
Satcat SDKでの「一覧表示」機能では、特定の結果を取得するためのフィルタリングおよびソート機能を、APIを介して利用できます。この関数は、list_
というフレーズで始まるのが特徴で、例えばlist_conjunctions
やlist_screenings
などがあります。
フィルタは1つ以上指定可能で、複数のフィルターを指定した場合、すべての条件に一致する結果のみが返されます。
フィルタフィールド
フィルタは、list_
関数が返すモデルの任意のフィールドに対して使用できます。
def list_screenings(
...
) -> Collection[models.Screening]:
例えば、上のような関数を入力すると、
Screening
モデルのCollection
を返します。この時、Screening
モデルの任意のフィールド(例:conjunctions_count
やcreated_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"
)