このところ云々している以下のドキュメントですが
レコメンドな Gremlin クエリをでっちあげてみました。
Query 3 の一部の以下なあたり。
MATCH (c)-[]->(n2)-[:REST_CUISINE]->(p:Cusine {name: "Mexican"})
WITH COLLECT(n2) AS pn, v1
UNWIND pn AS n3
MATCH (c)-[]->(n3)-[:FEATURES]->(q1:Features {price: "medium", smoking: "none"})
WITH COLLECT(n3) AS pn
UNWIND pn AS n4
WITH DISTINCT n4
MATCH (c)-[]->(n4)-[:ADDRESS]-(k)
RETURN n4.name AS Restaurant, k.city AS City;
以下が出てきました。
g.V().hasLabel(':CUISINE').has('Cuisine', 'Mexican').in().
out(':FEATURES').has('Smoking_Area', 'none').has('Price', 'medium').
in().valueMap()
ラベルが微妙に違いますがご容赦下さい。
とりあえず
データの持ち方てきには、node な属性で対象かどうかを判断、ではなくて edge を跨いで別な node に判断材料を持っておくのが良いのかどうか。