创建索引后,lookup查询属性超过索引长度被截断。

版本 2.0GA
假设创建如何tag以及index:

CREATE TAG player(name string, age int);
CREATE TAG INDEX name ON player(name(20))

当插入数据name属性超过20个字符串时,使用lookup yiled player.name 时,只显示name的前20个字符串

20

有方法可以规避吗,业务插入数据时无法确定长度的

索引是定长的,但是返回的数据不应该是定长的,有什么使用的过程描述吗或者截图?

创建tag以及index如上图问题所示,

数据插入操作如下:

INSERT VERTEX player(name, age) VALUES
“Russell Westbrook”: (“Russell Westbrook”, 30),
“Chris Paul”: (“Chris Paul”, 33),
“Boris Diaw”: (“Boris Diaw”, 36),
“David West”: (“test1002gggggggggggwest”, 38),
“Danny Green”: (“Danny Green”, 31),
“Tim Duncan”: (“Tim Duncan”, 42),
“James Harden”: (“James Harden”, 29),
“Tony Parker”: (“Tony Parker”, 36),
“Aron Baynes”: (“Aron Baynes”, 32),
“Ben Simmons”: (“Ben Simmons”, 22),
“Blake Griffin”: (“Blake Griffin”, 30);

查看结果为,字符串被截断了

感谢反馈,应该是各 bug,返回的属性不应该被截断。我自己试了下,lookup 有截断,match 没有,你也可以试试 match。

(root@nebula) [sf30]>
(root@nebula) [sf30]> lookup on Person yield Person.lastName as name| limit 2
+----------+------+
| VertexID | name |
+----------+------+
| 296      | "Ga" |
+----------+------+
| 344      | "Ma" |
+----------+------+
Got 2 rows (time spent 853346/864492 us)

Mon, 19 Apr 2021 17:17:31 CST

(root@nebula) [sf30]> match (v:Person) return v.lastName | limit 2
+------------+
| v.lastName |
+------------+
| "Khan"     |
+------------+
| "Muller"   |
+------------+
Got 2 rows (time spent 8799672/8829865 us)

Mon, 19 Apr 2021 17:18:01 CST

(root@nebula) [sf30]> DESCRIBE tag index idx_person2
+------------+-------------------+
| Field      | Type              |
+------------+-------------------+
| "lastName" | "fixed_string(2)" |
+------------+-------------------+
Got 1 rows (time spent 2409/6062 us)

Mon, 19 Apr 2021 17:18:15 CST

cc @bright-starry-sky

你好,lookup中有做一个处理,如果where条件中的索引正好是yield的列就直接返回索引,所以你得到的是一个截断的属性,而match和fetch语句里没有做这个操作,所以能得到正确结果。

由于这块改动会对性能有较大影响,我们还需要内部评估一下 cc @bright-starry-sky @jude-zhu

目前有如下折中的方式:

  1. 将索引长度设置成较大值
  2. 将你的语句改成 lookup on player where player.name == "test1002gggggggggggwest" yield player.name, player.age 这时因为过滤条件和yield列不同,在根据索引找到点之后会再去获取点的数据而不是直接返回索引
  3. 考虑使用match语句 MATCH(v:player{name:"test1002gggggggggggwest"}) RETURN v

有后续讨论结果我们会在这里更新。

1 个赞

这个问题修复了吗? 如何修复的?

@Aiee 咱们这个问题有 issue 么哈?
cc @Sophie

An issue has been raised here
cc @Sophie

1 个赞