voidPlannersRegister::registerMatch(){auto&planners=Planner::plannersMap()[Sentence::Kind::kMatch];planners.emplace_back(&MatchPlanner::match,&MatchPlanner::make);auto&startVidFinders=StartVidFinder::finders();// MATCH(n) WHERE id(n) = value RETURN n
startVidFinders.emplace_back(&VertexIdSeek::make);// MATCH (n)-[]-(l), (l)-[]-(m) return n,l,m
// MATCH (n)-[]-(l) MATCH (l)-[]-(m) return n,l,m
startVidFinders.emplace_back(&ArgumentFinder::make);// MATCH(n:Tag{prop:value}) RETURN n
// MATCH(n:Tag) WHERE n.prop = value RETURN n
startVidFinders.emplace_back(&PropIndexSeek::make);// seek by tag or edge(index)
// MATCH(n: tag) RETURN n
// MATCH(s)-[:edge]->(e) RETURN e
startVidFinders.emplace_back(&LabelIndexSeek::make);// Scan the start vertex directly
// Now we hard code the order of match rules before CBO,
// put scan rule at the last for we assume it's most inefficient
startVidFinders.emplace_back(&ScanSeek::make);}
(root@nebula)[basketballplayer]>explainGOFROM"player100"over*BIDIRECTWHEREid($$)=="player101"YIELDedgeASeExecutionsucceeded(timespent1549/16916us)ExecutionPlan(optimizetime751us)-----+--------------+--------------+----------------+-----------------------------------
|id|name|dependencies|profilingdata|operatorinfo|-----+--------------+--------------+----------------+-----------------------------------
|7|Project|6||outputVar:{||||||"colNames":[||||||"e"||||||],||||||"type":"DATASET",||||||"name":"__Project_7"||||||}||||||inputVar:__Filter_6||||||columns:[||||||"EDGE AS e"||||||]|-----+--------------+--------------+----------------+-----------------------------------
|6|Filter|5||outputVar:{||||||"colNames":[||||||"EDGE",||||||"JOIN_DST_VID",||||||"$$",||||||"DST_VID"||||||],||||||"type":"DATASET",||||||"name":"__Filter_6"||||||}||||||inputVar:__LeftJoin_5||||||condition:(id($$)=="player101")||||||isStable:false|-----+--------------+--------------+----------------+-----------------------------------
|5|LeftJoin|4||outputVar:{||||||"colNames":[||||||"EDGE",||||||"JOIN_DST_VID",||||||"$$",||||||"DST_VID"||||||],||||||"type":"DATASET",||||||"name":"__LeftJoin_5"||||||}||||||inputVar:{||||||"rightVar":{||||||"__Project_4":0||||||},||||||"leftVar":{||||||"__Project_2":0||||||}||||||}||||||hashKeys:[||||||"COLUMN[-1]"||||||]||||||probeKeys:[||||||"COLUMN[-1]"||||||]||||||kind:LeftJoin|-----+--------------+--------------+----------------+-----------------------------------
|4|Project|3||outputVar:{||||||"colNames":[||||||"$$",||||||"DST_VID"||||||],||||||"type":"DATASET",||||||"name":"__Project_4"||||||}||||||inputVar:__GetVertices_3||||||columns:[||||||"$$ AS $$",||||||"COLUMN[0] AS DST_VID"||||||]|-----+--------------+--------------+----------------+-----------------------------------
|3|GetVertices|2||outputVar:{||||||"colNames":[],||||||"type":"DATASET",||||||"name":"__GetVertices_3"||||||}||||||inputVar:__Project_2||||||space:49||||||dedup:true||||||limit:9223372036854775807||||||filter:||||||orderBy:[]||||||src:COLUMN[-1]||||||props:[||||||{||||||"props":[||||||"_tag"||||||],||||||"tagId":66||||||},||||||{||||||"props":[||||||"_tag"||||||],||||||"tagId":65||||||},||||||{||||||"props":[||||||"_tag"||||||],||||||"tagId":64||||||},||||||{||||||"props":[||||||"_tag",||||||"uuid"||||||],||||||"tagId":63||||||},||||||{||||||"props":[||||||"_tag",||||||"geo"||||||],||||||"tagId":60||||||},||||||{||||||"props":[||||||"_tag",||||||"age",||||||"name"||||||],||||||"tagId":59||||||},||||||{||||||"props":[||||||"_tag",||||||"age",||||||"name"||||||],||||||"tagId":50||||||},||||||{||||||"props":[||||||"_tag",||||||"address",||||||"birthday",||||||"email",||||||"name",||||||"phone_num"||||||],||||||"tagId":61||||||},||||||{||||||"props":[||||||"_tag",||||||"address"||||||],||||||"tagId":62||||||},||||||{||||||"props":[||||||"_tag",||||||"name"||||||],||||||"tagId":51||||||}||||||]||||||exprs:|-----+--------------+--------------+----------------+-----------------------------------
|2|Project|1||outputVar:{||||||"colNames":[||||||"EDGE",||||||"JOIN_DST_VID"||||||],||||||"type":"DATASET",||||||"name":"__Project_2"||||||}||||||inputVar:__GetNeighbors_1||||||columns:[||||||"EDGE AS EDGE",||||||"*._dst AS JOIN_DST_VID"||||||]|-----+--------------+--------------+----------------+-----------------------------------
|1|GetNeighbors|0||outputVar:{||||||"colNames":[],||||||"type":"DATASET",||||||"name":"__GetNeighbors_1"||||||}||||||inputVar:__VAR_0||||||space:49||||||dedup:false||||||limit:-1||||||filter:||||||orderBy:[]||||||src:COLUMN[0]||||||edgeTypes:[]||||||edgeDirection:OUT_EDGE||||||vertexProps:||||||edgeProps:[||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type",||||||"end_year",||||||"start_year"||||||],||||||"type":-52||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type",||||||"degree"||||||],||||||"type":-53||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type",||||||"time"||||||],||||||"type":-67||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type",||||||"time"||||||],||||||"type":-68||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type"||||||],||||||"type":-69||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type"||||||],||||||"type":-70||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type"||||||],||||||"type":-71||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type",||||||"end_year",||||||"start_year"||||||],||||||"type":52||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type",||||||"degree"||||||],||||||"type":53||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type",||||||"time"||||||],||||||"type":67||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type",||||||"time"||||||],||||||"type":68||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type"||||||],||||||"type":69||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type"||||||],||||||"type":70||||||},||||||{||||||"props":[||||||"_dst",||||||"_rank",||||||"_src",||||||"_type"||||||],||||||"type":71||||||}||||||]||||||statProps:||||||exprs:||||||random:false|-----+--------------+--------------+----------------+-----------------------------------
|0|Start|||outputVar:{||||||"colNames":[],||||||"type":"DATASET",||||||"name":"__Start_0"||||||}|-----+--------------+--------------+----------------+-----------------------------------
Tue,13Sep202215:13:28CST
- GO FROM "player100" over * BIDIRECT WHERE id($$) == "player101" YIELD edge as e
+ GO FROM "player100" over * BIDIRECT WHERE dst(edge) == "player101" OR src(edge) == "player101" YIELD edge AS e