ソフトウェアシステムには組織とアプリケーションがあります。ユーザーアクションによってログレコードが生成されます。ログレコード(緑色)は組織(赤色)に属し、アプリケーション(ピンク色)に属することがあります。サイファーが行うノードだけを返すので、私は2つのCASE
表現を使用ノードがオプションの関係を持つクエリを最適化することは可能ですか?
MATCH
(log0:Log)-[:GENERATED_IN]->(org:Organization),
(app:Application)<-[:GENERATED_IN]-(log1:Log)-[:GENERATED_IN]->(org:Organization)
WHERE ($orgID IS NULL
OR ID(org)=$orgID)
AND ($appID IS NULL
OR ID(app)=$appID)
RETURN DISTINCT
CASE $appID
WHEN null THEN log0
ELSE log1
END
CASE $appID
WHEN null then log1
ELSE null
END
:(両方のparamsはオプション)アプリケーションと組織によってノードをフィルタリングしようと
は、私は、次のクエリを作成しました:Organization
との関係はlog0
(ただし、すべて:Log
ノードが返されると予想していましたが)、CASE
からいくつかの変数を返す可能性がないため、i。 e。
RETURN DISTINCT
CASE $appID
WHEN null THEN log0, log1
ELSE log1
これはきれいに読みやすく、保守性コード(心の中でESP。キープ私は現在、簡単にするために除外他のフィルタリングのparamsが多い)ではないようなので、このクエリを最適化するために、任意の可能性はありますか?
「ESPを念頭に置いて、私は現在、簡単にするために除外他のフィルタリングのparamsがたくさんある。」 - これらのparamsは、同じノードをフィルタリングするか、またはそれらすべてが(appID、orgIDなどと同様に)別のノードをフィルタリングします。 –
@GaborSzarnyasそれらのうちのいくつかは ':Log'プロパティ(作成時、名前変更時のテキスト)にフィルタをかけ、他のノードとの関係に基づいてフィルタリングします(':User'への変更の著者、 ':Permission' nodes) – Polyakoff