我正在尝试获取数据共享图中与其他人具有相同地址且人数在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的情况下创建能够运行此查询的索引?
由于
答案 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的节点。
您可以在地址节点的文本字段上使用索引。