在 Titan/Janus 中建立索引
Indexing in Titan/Janus
我有两个问题:
如何索引这个查询?
g.V(vertexId).repeat(out().hasLabel('location')).emit().tree().next()
在 Titan 1.0 文档中,仅提供了在数据已插入时对图形进行一次索引的方法。
但是在 generate-modern.groovy
文件中 here
我们看到索引是在创建顶点之前完成的,这似乎是合理的。但是我在尝试使用 buildMixedIndex
时无法做到这一点,因为它正在抛出我
illegal argument exception :Unknown external index backend search
我的方法是
def location = mgmt.makeVertexLabel("location").make()
def displayName = mgmt.makePropertyKey("displayName").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def shortName = mgmt.makePropertyKey("shortName").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def description = mgmt.makePropertyKey("description").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def latitude = mgmt.makePropertyKey("latitude").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def longitude = mgmt.makePropertyKey("longitude").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def locationByName = mgmt.buildIndex("displayNameAndShortNameAndDescriptionAndLatitudeAndLongitude", Vertex.class).addKey(displayName).addKey(shortName).addKey(description)
.addKey(latitude).addKey(longitude).indexOnly(location).buildMixedIndex('search')
我哪里弄错了?
如果该查询花费了很长时间,问题很可能是它访问了太多元素或陷入了无限循环。现有的 JanusGraph/Titan 索引对此无济于事。您已经通过 id g.V(vertexId)
进行了直接顶点查找,查询的其余部分正在从该顶点遍历邻域。我建议使用边标签,即 out('friends')
来限制您访问的边数。您也可以使用 simplePath()
to eliminate cyclic paths. You could also use times()
or until()
to keep a limit on the number of times you loop with the repeat()
步骤。
您引用的配置示例仅使用复合索引,不需要索引后端。
Mixed indexes 需要配置索引后端,Elasticsearch、Lucene 或 Solr。选择其中之一,然后确保在初始化图形时传递正确的配置属性。您可以在 conf
目录中的分发 zip 文件中找到几个示例。例如,在 janusgraph-cassandra-es.properties
中,您会发现:
index.search.backend=elasticsearch
index.search.hostname=127.0.0.1
index.search.elasticsearch.client-only=true
其中 index.X.backend
中的 search
是您必须传递给 buildMixedIndex(X)
的所选索引配置名称。
这是。
复合索引和混合索引仅适用于第一级 gremlin 查询,不适用于第二级。二级查询需要以顶点为中心的索引。
我有两个问题:
如何索引这个查询?
g.V(vertexId).repeat(out().hasLabel('location')).emit().tree().next()
在 Titan 1.0 文档中,仅提供了在数据已插入时对图形进行一次索引的方法。 但是在
generate-modern.groovy
文件中 here
我们看到索引是在创建顶点之前完成的,这似乎是合理的。但是我在尝试使用buildMixedIndex
时无法做到这一点,因为它正在抛出我illegal argument exception :Unknown external index backend search
我的方法是
def location = mgmt.makeVertexLabel("location").make()
def displayName = mgmt.makePropertyKey("displayName").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def shortName = mgmt.makePropertyKey("shortName").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def description = mgmt.makePropertyKey("description").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def latitude = mgmt.makePropertyKey("latitude").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def longitude = mgmt.makePropertyKey("longitude").dataType(String.class).cardinality(Cardinality.SINGLE).make()
def locationByName = mgmt.buildIndex("displayNameAndShortNameAndDescriptionAndLatitudeAndLongitude", Vertex.class).addKey(displayName).addKey(shortName).addKey(description)
.addKey(latitude).addKey(longitude).indexOnly(location).buildMixedIndex('search')
我哪里弄错了?
如果该查询花费了很长时间,问题很可能是它访问了太多元素或陷入了无限循环。现有的 JanusGraph/Titan 索引对此无济于事。您已经通过 id
g.V(vertexId)
进行了直接顶点查找,查询的其余部分正在从该顶点遍历邻域。我建议使用边标签,即out('friends')
来限制您访问的边数。您也可以使用simplePath()
to eliminate cyclic paths. You could also usetimes()
oruntil()
to keep a limit on the number of times you loop with therepeat()
步骤。您引用的配置示例仅使用复合索引,不需要索引后端。
Mixed indexes 需要配置索引后端,Elasticsearch、Lucene 或 Solr。选择其中之一,然后确保在初始化图形时传递正确的配置属性。您可以在 conf
目录中的分发 zip 文件中找到几个示例。例如,在 janusgraph-cassandra-es.properties
中,您会发现:
index.search.backend=elasticsearch
index.search.hostname=127.0.0.1
index.search.elasticsearch.client-only=true
其中 index.X.backend
中的 search
是您必须传递给 buildMixedIndex(X)
的所选索引配置名称。
这是