使用 LOOKUP 查询时,IndexNotFound: No valid index found

嗨~ 我想请问一下关于 IndexNotFound: No valid index found 的问题。

  • nebula 版本:2.0.0 rc
  • 部署方式: Docker

我通过 VertexID 查询 entity.name 属性的时候,是有值的,如下图所示:

但是当我用 LOOKUP 去查询 entity.name 对应的 VertexID 时,就显示:

image

我又按照官网的示例试了一下重新创建索引然后 LOOKUP,一样的语句和流程,但是还是显示 IndexNotFound: No valid index found,如下图所示:

请问一下有人知道怎么解决这个问题吗~~谢谢!

使用lookup语句需要创建索引: https://docs.nebula-graph.com.cn/manual-CN/2.query-language/4.statement-syntax/1.data-definition-statements/


你这里只是创建了space 和 tag,并没有创建索引哦

按文档解释,无论是MATCH还是LOOKUP都只能对已建立的索引进行过滤。那么有两个问题:
1、如果建立了两个单属性索引,能同时对这两个属性进行过滤吗?能的话是如何使用索引的?
2、当前的这种设置不支持属性扫描过滤操作,但现实使用场景很多,比如节点属性很多,我可以对其中一些关键字段建索引,LOOKUP出一个子集后,再根据某些字段进行扫描过滤。这个在后续版本迭代中有可能支持吗?

按文档解释,无论是MATCH还是LOOKUP都只能对已建立的索引进行过滤。那么有两个问题:
1、如果建立了两个单属性索引,能同时对这两个属性进行过滤吗?能的话是如何使用索引的?
回答,因为nebula的索引是左匹配索引,如果这个tag有两个属性c1 和 c2 ,如果对c1 和 c2分别创建了索引,那么查询的时候需要分别查询这两个索引,如果是OR操作,可以将结果集做union;如果创建的索引包含c1 , c2,那么这个索引即可以过滤c1和c2,也可以单独过滤c1;如果创建的索引包含c2,c1, 那么这个索引既可以过滤c1和c2,也可以对c2进行单独过滤。
2、当前的这种设置不支持属性扫描过滤操作,但现实使用场景很多,比如节点属性很多,我可以对其中一些关键字段建索引,LOOKUP出一个子集后,再根据某些字段进行扫描过滤。这个在后续版本迭代中有可能支持吗?
回答,这个功能是在计划中的,比如tag(c1, c2, c3) , 那么如果只对c1 做了索引,那么底层将按照c1的条件扫描出一个结果集,然后再通过c2和c3将这个结果集进行进一步的过滤,最终得出最终结果集。但是这个场景下,查询效率肯定比对c1,c2,c3全部创建索引的效率要低。
[/quote]

2赞

首先感谢详尽的回答!
1、“如果是OR操作,可以将结果集做union”,如果是AND,也可以自动通过两个索引取交集吧?
2、“查询效率肯定比对c1,c2,c3全部创建索引的效率要低。”,理解,扫描操作肯定效率低,但如果没有这个功能,就只能客户端取回后再过滤,比较浪费带宽。另外如果还要查过滤后的nHOP,就需要再把VID传回来二次查询,这个需要额外编码,对数据探索的效率影响比较大。如果能支持的话就可以直接用管道操作了。我们团队目前在选型图库,性能上Nebula是一流的,但这个功能对我们来说几乎是必须的。

感谢您的试用,我们将尽快落地这个功能。

1赞

计划会落在2.0吗?

浙ICP备20010487号