是數據模型,使得產品連接列表(例如(:產品) - [:上] - >(:產品)
你能保持最近的節點的軌道要麼?與
一個時間戳,您可以輕鬆地找到或連接到最新的產品節點的另一節點。如果是這樣,你總是可以查詢出的是最近的類似以下內容的查詢。
match (max:Date {name: 'Last Product Date'})-->(latest:Product)
with latest
match p=(latest)-[:PREVIOUS*..100]->(:Product)
return nodes(p)
order by length(p) desc
limit 1
或者你選擇的東西
match (max:Date {name: 'Product Date'})
with max
match p=(latest:Product)-[:PREVIOUS*..100]->(:Product)
where latest.date = max.date
return nodes(p)
order by length(p) desc
limit 1
另一種仍然使用列表的方法可能是爲每個產品保留一個索引創建日期屬性。但是當尋找最近的選擇時,控制日期不會回到開始時間,因此您有一個較小的節點池(即不是數百萬)。然後在該較小的池上使用max
函數來查找最近的節點,然後按照您想要的數量來追溯它。
match (latest:Product)
where latest.date > {control_date}
with max(latest.date) as latest_date
match p=(product:Product)-[:PREVIOUS*..100]->(:Product)
where product.date = latest_date
return nodes(p)
order by length(p) desc
limit 1
刪除鏈接列表中的節點非常簡單。如果您需要進行大量搜索並且您不想訂購這些產品,我認爲將這些產品保存在列表中是一個相當不錯的圖形應用程序。這是一個維護列表的例子。
match (previous:Product)<-[:PREVIOUS]-(product_to_delete:Product)<-[:PREVIOUS]-(next:Product)
where product_to_delete.name = 'name of node to delete'
create (previous)<-[:PREVIOUS]-(next)
detach delete product_to_delete
return previous, next
我認爲保留鏈接列表的訂購產品會使產品刪除變得複雜,因爲您需要維護rel鏈一致。其他方法我猜你可以有'(:ProductIndex)'節點並且有'(:Product) - [:INDEXED] - >(:ProductIndex)'關係。那麼你可以限制最新索引產品的數量。這種方式簡單的產品索引與極限匹配應該做的工作。 – drgraduss
我不認爲管理鏈接列表中的刪除是繁重的 - 我用示例更新了答案。如果你真的不想這樣做,你可以總是索引日期或產品編號(假設遞增),並使用該屬性來清除最近的1000個左右,然後在該縮小列表上使用排序。 –