如果您不能使用 Java,那么您只能使用 Groovy。至于
如何存储我自己的数据以供titan db处理
旁注
对于图形数据库,有多种存储这些数据的方法。如果您想真正形式化您的数据结构,我建议您查看Ontologies、OWL 和Topic Maps,这些可以作为如何在图形数据库中形式化和结构化数据的巨大灵感。这些读取只有在您寻找在图表中非常正式地结构化数据的方法时才有用。
结构示例
现在让我们假设您只想跟踪客户和他们购买的产品。一个简单的结构是 customers 和 products 都是顶点,从客户到产品的边是客户购买该产品的事实。我们甚至可以在该优势上添加其他数据,例如购买时间和数量。以下是如何在 Groovy 中执行此操作的示例:
g = TitanFactory.open("titan-cassandra-es.properties")
gremlin> customerBob = g.addVertex("Bob");
==>v[12]
gremlin> customerAlice = g.addVertex("Alice");
==>v[13]
gremlin> productFish = g.addVertex("Fish");
==>v[14]
gremlin> productMeat = g.addVertex("Meat");
==>v[15]
gremlin> edge = customerBob.addEdge("purchased", productMeat, "Day", "Friday", "Qauntity", 2);
==>e[16][12-purchased->15]
gremlin> edge = customerBob.addEdge("purchased", productFish, "Day", "Friday", "Qauntity", 1);
==>e[17][12-purchased->14]
gremlin> edge = customerAlice.addEdge("purchased", productMeat, "Day", "Monday", "Qauntity", 3);
==>e[18][13-purchased->15]
上面的内容基本上是说 Bob 在星期五买了一些肉和鱼,而 Alice 在星期一买了一些肉。如果我们想知道 Bob 在星期五买了什么,我们可以进行以下遍历
gremlin> g.traversal().V().hasLabel("Bob").outE("purchased").has("Day", "Friday").otherV().label();
==>Meat
==>Fish
索引
在真正深入研究索引之前,先了解一下结构。以下是关于使用 Elasticsearch 和 Titan 进行索引的非常基本的解释:
关于索引,要知道titan 有不同类型的索引,Composite、Vertex-Centric 和Mixed 都有各自的用途您应该阅读this 了解更多信息。
索引用于加速遍历和查找。所以你需要决定索引什么。对于我们的示例,我们希望快速了解在不同日期进行的所有购买。这意味着我们可以在边上放置一个混合索引来帮助我们(复合索引也可以,但您询问的是弹性搜索,所以我们将使用混合索引)。
要定义混合索引,我们首先定义一个简单的模式(更多信息here):
mgmt = graph.openManagement();
purchased = mgmt.makeEdgeLabel("purchased").multiplicity(MULTI).make();
day = mgmt.makePropertyKey("Day").dataType(String.class).make();
您不需要为所有内容显式定义架构,但对于您想要索引的任何内容都是必不可少的。现在您可以创建索引了:
mgmt.buildIndex("productsPurchased", Edge.class).addKey(day).buildMixedIndex("search")
mgmt.commit() //"search" is defined in your titan-conf.properties file
用这个索引查询比如:
g.traversal().E().has("Day", "Friday")
会更快。
注意:您应该在加载数据之前创建索引和架构。从长远来看,它只会让事情变得更简单。