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)