時間内に互いに続く状態を持つグラフがあります。各状態には、発生したいくつかのアクション (0..n) と、いくつかのソフトウェアによって割り当てられたいくつかの推奨事項 (0..n) を含めることができます。
このようにサイファーでクエリを実行できます
start n=node:name(name="State")
match a<-[:hasAction]-s-[:isA]->n
s-[l?:hasRecommendation]->r
where l.likelihood>0.2
return distinct s.name as state, collect(a.name) as actions,
r.name as recommendation, l.likelihood as likelihood
order by s.name asc, l.likelihood desc
これは私にこのようなテーブルを与えます
state | actions | recommendation | likelihood
--------------------------------------------------
State 1 | [a1,a2,a3] | a1 | 0.25
State 1 | [a1,a2,a3] | a4 | 0.05
State 2 | [a2,a3] | a3 | 0.56
State 2 | [a2,a3] | a2 | 0.34
State 2 | [a2,a3] | a1 | 0.15
そのテーブルを手動で処理すると、これらの結果をフィルター処理して、たとえば各州の上位 2 つの結果のみを取得できます。これは時間がかかり、非常に洗練されていません。
私の問題は、州にいくつの推奨事項があるかわからないため、ここで制限/スキップを使用できないことです。理想的には、上位の推奨事項を含む一定量 (たとえば 100) の州のみを返すようにしたいと考えています。このクエリは、0 ~ 100*n 行を返すことができます。
サイファーでこれを達成するためのより良い方法はありますか?