0

Rank can be filtered when I use the match clause: MATCH (n)-[r:follow]->(n2) WHERE rank(r) == 1 RETURN edge AS e But error appears when using the LOOKUP ON clause: LOOKUP ON follow WHERE rank(edge) == 1 YIELD edge AS e

Can I use LOOKUP to filter rank?

黄凤仙
  • 107
  • 5

1 Answers1

0

Indeed, for now rank filtering is not supported in NebulaGraph IndexScan:

(root@nebula) [basketballplayer]> LOOKUP ON follow WHERE rank(follow) != 0 AND follow.degree > 30 YIELD edge AS e;
[ERROR (-1009)]: SemanticError: Expression (rank(follow)!=0) not supported yet

Tue, 06 Dec 2022 12:18:39 CST

The mitigation is to filter it after the scan:

(root@nebula) [basketballplayer]> LOOKUP ON follow WHERE follow.degree > 30 YIELD edge AS e | YIELD $-.e AS e WHERE rank($-.e) !=0
+---+
| e |
+---+
+---+
Empty set (time spent 4450/168471 us)

Regarding the documentation, it's listed in limitation section of LOOKUP for now: https://docs.nebula-graph.io/3.3.0/3.ngql-guide/7.general-query-statements/5.lookup/#limitations_of_using_where_in_lookup

Note: The indexscan is only called when the rank filtering is the "starting node" of the whole graph query, that is, say, if we are doing graph traverse like:

MATCH p=(x:TagA {PropFoo: "bar"})-[e]-(:TagB)-[e1]-(:TagC)
WHERE rank(e) > 198801017766
RETURN p

And we could tell the starting node is x here, there is no such limitation at all.

for instance:

(root@nebula) [basketballplayer]> """
                               -> MATCH p=(x:player {name: "Tim Duncan"})-[e]-(:team)-[]-(:player)
                               -> WHERE rank(e) == 0
                               -> RETURN p LIMIT 10
                               -> """
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| p                                                                                                                                                                                                                                                  |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| <("player100" :player{age: 42, name: "Tim Duncan"})-[:serve@0 {end_year: 2016, start_year: 1997}]->("team204" :team{name: "Spurs"})<-[:serve@0 {end_year: 2013, start_year: 2013}]-("player114" :player{age: 39, name: "Tracy McGrady"})>          |
| <("player100" :player{age: 42, name: "Tim Duncan"})-[:serve@0 {end_year: 2016, start_year: 1997}]->("team204" :team{name: "Spurs"})<-[:serve@0 {end_year: 2015, start_year: 2011}]-("player110" :player{age: 27, name: "Cory Joseph"})>            |
| <("player100" :player{age: 42, name: "Tim Duncan"})-[:serve@0 {end_year: 2016, start_year: 1997}]->("team204" :team{name: "Spurs"})<-[:serve@20132015 {end_year: 2015, start_year: 2013}]-("player104" :player{age: 32, name: "Marco Belinelli"})> |
| <("player100" :player{age: 42, name: "Tim Duncan"})-[:serve@0 {end_year: 2016, start_year: 1997}]->("team204" :team{name: "Spurs"})<-[:serve@20182019 {end_year: 2019, start_year: 2018}]-("player104" :player{age: 32, name: "Marco Belinelli"})> |
| <("player100" :player{age: 42, name: "Tim Duncan"})-[:serve@0 {end_year: 2016, start_year: 1997}]->("team204" :team{name: "Spurs"})<-[:serve@0 {end_year: 2015, start_year: 2013}]-("player107" :player{age: 32, name: "Aron Baynes"})>            |
| <("player100" :player{age: 42, name: "Tim Duncan"})-[:serve@0 {end_year: 2016, start_year: 1997}]->("team204" :team{name: "Spurs"})<-[:serve@0 {end_year: 2016, start_year: 2015}]-("player111" :player{age: 38, name: "David West"})>             |
| <("player100" :player{age: 42, name: "Tim Duncan"})-[:serve@0 {end_year: 2016, start_year: 1997}]->("team204" :team{name: "Spurs"})<-[:serve@0 {end_year: 2016, start_year: 2012}]-("player108" :player{age: 36, name: "Boris Diaw"})>             |
| <("player100" :player{age: 42, name: "Tim Duncan"})-[:serve@0 {end_year: 2016, start_year: 1997}]->("team204" :team{name: "Spurs"})<-[:serve@0 {end_year: 2018, start_year: 2010}]-("player105" :player{age: 31, name: "Danny Green"})>            |
| <("player100" :player{age: 42, name: "Tim Duncan"})-[:serve@0 {end_year: 2016, start_year: 1997}]->("team204" :team{name: "Spurs"})<-[:serve@0 {end_year: 2017, start_year: 2015}]-("player112" :player{age: 29, name: "Jonathon Simmons"})>       |
| <("player100" :player{age: 42, name: "Tim Duncan"})-[:serve@0 {end_year: 2016, start_year: 1997}]->("team204" :team{name: "Spurs"})<-[:serve@0 {end_year: 2015, start_year: 2010}]-("player109" :player{age: 34, name: "Tiago Splitter"})>         |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Got 10 rows (time spent 18661/316572 us)
Wey Gu
  • 575
  • 1
  • 6
  • 11