已知深度和边查询效率
Known depth and edges query efficency
我的数据是这样的:
a ---> b ---> c
a、b、c为顶点,a只有一个,b-s、c-s有多个(树形结构)。
我的 a ---> b 边是一个 class(我们称它为 ab class),而 b ---> c 边是另一个(bc class).
我需要一个查询,给定 a 的名称,生成 x 个 c-s。
到目前为止,我发现这行得通:
select expand(set(out("ab").out("bc"))) from a where name='aName' limit x
问题:
- 可以改进这个查询吗?
- 如何只select,例如c-s的名称,而不是整个记录?
感谢您的帮助!
我相信只有在 A.name 属性 上定义 index 才能改进查询。
关于你的第二个问题:
create class A extends V
create class B extends V
create class C extends V
create class AB extends E
create class BC extends E
create vertex A set name = 'aName'
create vertex B set name = 'bName0'
create vertex B set name = 'bName1'
create vertex C set name = 'cName0'
create vertex C set name = 'cName1'
create vertex C set name = 'cName2'
create vertex C set name = 'cName3'
create edge AB from (select from A where name = 'aName') to (select from B where name = 'bName0')
create edge AB from (select from A where name = 'aName') to (select from B where name = 'bName1')
create edge BC from (select from B where name = 'bName0') to (select from C where name = 'cName0')
create edge BC from (select from B where name = 'bName0') to (select from C where name = 'cName2')
create edge BC from (select from B where name = 'bName1') to (select from C where name = 'cName1')
create edge BC from (select from B where name = 'bName1') to (select from C where name = 'cName3')
这些查询可能对您有所帮助:
select from (select expand(out("AB").out("BC").include('name')) from A where name = 'aName') limit 3
// or
select name from (select expand(out("AB").out("BC")) from A where name = 'aName') limit 3
我的数据是这样的:
a ---> b ---> c
a、b、c为顶点,a只有一个,b-s、c-s有多个(树形结构)。
我的 a ---> b 边是一个 class(我们称它为 ab class),而 b ---> c 边是另一个(bc class).
我需要一个查询,给定 a 的名称,生成 x 个 c-s。
到目前为止,我发现这行得通:
select expand(set(out("ab").out("bc"))) from a where name='aName' limit x
问题:
- 可以改进这个查询吗?
- 如何只select,例如c-s的名称,而不是整个记录?
感谢您的帮助!
我相信只有在 A.name 属性 上定义 index 才能改进查询。
关于你的第二个问题:
create class A extends V
create class B extends V
create class C extends V
create class AB extends E
create class BC extends E
create vertex A set name = 'aName'
create vertex B set name = 'bName0'
create vertex B set name = 'bName1'
create vertex C set name = 'cName0'
create vertex C set name = 'cName1'
create vertex C set name = 'cName2'
create vertex C set name = 'cName3'
create edge AB from (select from A where name = 'aName') to (select from B where name = 'bName0')
create edge AB from (select from A where name = 'aName') to (select from B where name = 'bName1')
create edge BC from (select from B where name = 'bName0') to (select from C where name = 'cName0')
create edge BC from (select from B where name = 'bName0') to (select from C where name = 'cName2')
create edge BC from (select from B where name = 'bName1') to (select from C where name = 'cName1')
create edge BC from (select from B where name = 'bName1') to (select from C where name = 'cName3')
这些查询可能对您有所帮助:
select from (select expand(out("AB").out("BC").include('name')) from A where name = 'aName') limit 3
// or
select name from (select expand(out("AB").out("BC")) from A where name = 'aName') limit 3