match查询,这是个bug吧

2.0 ga版本
查询语句
match p=(c:tag_new{name:‘家乡’})-[e:relation*1…3]-(d:entity_new{name:‘乡村’}) return p
结果:

<("tag-2" :tag_new{id: "tag-2", name: "家乡"})<-[:relation@0 {end: "tag-2", start: "entity-1"}]-("entity-1" :entity_new{id: "entity-1", name: "安田村"})-[:relation@0 {end: "tag-1", start: "entity-1"}]->("tag-1" :tag_new{id: "tag-1", name: "乡村"})>  

这个结果中就没有entity_new的name=乡村的数据

这其实是跟 opencypher 兼容时的一个已知问题,因为在 neo4j 中的属性是必须唯一的,比如这里的 name 只能有一个属性叫 name。但是这跟 nebula 在实现上不一致的,现在 nebula 在实现上碰到不同 tag 内相同的属性名字,只是选择了第一个名字相同的属性,没有加 tag 的限定。

这个问题的解决方案我们内部也在讨论,后面会来 fix 这个问题。

如果查询中的 d 只会有 tag_new 一个tag,你可以在 where 中做下过滤:

match p=(c:tag_new{name:‘家乡’})-[e:relation*1…3]-(d:{name:‘乡村’}) 
where tags(d) == ['tag_new']
return p

https://github.com/vesoft-inc/nebula-graph/issues/726

浙ICP备20010487号