在DSE图表中使用索引

时间:2017-02-21 13:16:03

标签: datastax datastax-enterprise gremlin datastax-enterprise-graph

我正在尝试获取数据共享图中与其他人具有相同地址且人数在3到5之间的人员列表。 这是查询:

g.V().hasLabel('person').match(__.as('p').out('has_address').as('a').dedup().count().as('nr'),__.as('p').out('has_address').as('a')).select('nr').is(inside(3,5)).select('p','a','nr').range(0,20)

首次运行时,我注意到了以下错误消息:

  

无法找到回答查询子句的索引,而graph.allow_scan是   禁用:((标签=人))

我启用了graph.allow_scan = true,现在它正在运行

我想知道如何在不启用allow_scan = true的情况下创建能够运行此查询的索引?

由于

2 个答案:

答案 0 :(得分:1)

您可以使用如下命令将索引添加到架构中来创建索引:

schema.vertexLabel('person').index('address').materialized().by('has_address').add()

有关添加索引的完整文档,请访问:https://docs.datastax.com/en/latest-dse/datastax_enterprise/graph/using/createIndexes.html

你不应该启用graph.allow_scan = true,因为它在CQL查询上启用了ALLOW FILTERING。这将导致大量群集扫描,并且将不可避免地超时系统中的任何实际数据量。您永远不应该在任何类型的生产环境中启用它。

答案 1 :(得分:0)

我不确定索引是否是您问题的解决方案。 执行此操作的最佳方法是将地址重新定义为节点,并查找具有3到5之间的indegree的节点。

您可以在地址节点的文本字段上使用索引。