Gremlin是Apache ThinkerPop框架下的圖遍歷語言,Gremlin是一種函數式數據流語言,能夠使用戶使用簡潔的方式表述複雜的屬性圖的遍歷或查詢。每一個Gremlin遍歷由一系列步驟(可能存在嵌套)組成,每一步都在數據流(data stream)上執行一個原子操做。html
Gremlin 語言包括三個基本的操做:java
Tinkerpop3 模型核心概念git
先介紹一下圖中比較核心的幾個概念:github
graph.schema().propertyKey("name").asText().ifNotExist().create() graph.schema().propertyKey("age").asInt().ifNotExist().create() graph.schema().propertyKey("city").asText().ifNotExist().create() graph.schema().propertyKey("lang").asText().ifNotExist().create() graph.schema().propertyKey("date").asText().ifNotExist().create() graph.schema().propertyKey("price").asInt().ifNotExist().create()
person = graph.schema().vertexLabel("person").properties("name", "age", "city").primaryKeys("name").ifNotExist().create() software = graph.schema().vertexLabel("software").properties("name", "lang", "price").primaryKeys("name").ifNotExist().create()
knows = graph.schema().edgeLabel("knows").sourceLabel("person").targetLabel("person").properties("date").ifNotExist().create() created = graph.schema().edgeLabel("created").sourceLabel("person").targetLabel("software").properties("date", "city").ifNotExist().create()
marko = graph.addVertex(T.label, "person", "name", "marko", "age", 29, "city", "Beijing") vadas = graph.addVertex(T.label, "person", "name", "vadas", "age", 27, "city", "Hongkong") lop = graph.addVertex(T.label, "software", "name", "lop", "lang", "java", "price", 328) josh = graph.addVertex(T.label, "person", "name", "josh", "age", 32, "city", "Beijing") ripple = graph.addVertex(T.label, "software", "name", "ripple", "lang", "java", "price", 199) peter = graph.addVertex(T.label, "person","name", "peter", "age", 29, "city", "Shanghai") marko.addEdge("knows", vadas, "date", "20160110") marko.addEdge("knows", josh, "date", "20130220") marko.addEdge("created", lop, "date", "20171210", "city", "Shanghai") josh.addEdge("created", ripple, "date", "20151010", "city", "Beijing") josh.addEdge("created", lop, "date", "20171210", "city", "Beijing") peter.addEdge("created", lop, "date", "20171210", "city", "Beijing")
g.V() //建立使用graph,查詢使用g,其實g就是graph.traversal()
g.V().limit(5) // 查詢全部點,但限制點的返回數量爲5,也能夠使用range(x, y)的算子,返回區間內的點數量。 g.V().hasLabel('person') // 查詢點的label值爲'person'的點。 g.V('11') // 查詢id爲‘11’的點。
g.E() // 查詢全部邊,不推薦使用,邊數過大時,這種查詢方式不合理,通常須要添加過濾條件或限制返回數量。 g.E('55-81-5') // 查詢邊id爲‘55-81-5’的邊。 g.E().hasLabel('knows') // 查詢label爲‘knows’的邊。 g.V('46').outE('knows') // 查詢點id爲‘46’全部label爲‘knows’的邊。
g.V().limit(3).valueMap() // 查詢點的全部屬性(可填參數,表示只查詢該點, 一個點全部屬性一行結果)。 g.V().limit(1).label() // 查詢點的label。 g.V().limit(10).values('name') // 查詢點的name屬性(可不填參數,表示查詢全部屬性, 一個點每一個屬性一行結果,只有value,沒有key)。
g.V('600').drop() // 刪除ID爲600的點。
g.E('501-502-0').drop() //刪除ID爲「501-502-0」的邊。
//查詢一度好友 g.V('1500771').out() //查詢二度好友 g.V('1500771').out().out().dedup().not(hasId('1500771')) //查詢共同好友數 g.V('1500771').out().out().hasId('2165197').path().simplePath().count()
此外,還有查詢,遍歷,過濾,路徑,迭代,轉換,排序,邏輯,統計,分支等語法,能夠參考:http://tang.love/2018/11/15/g...。數據庫
參考: