图2.0.1 索引长度最长255未做限制,超过255长度部分未截取

图数据库2.0.1版本
测试步骤:
1、创建标签:create tag test(name string)
2、插入长度为101的点:字符串的第255位为B的字符,256位为C,300位为D,其余为a。 例如aaaaa…***aaaaaBCDDDDDD(300位)
insert vertex test(name) values 101:(“300位字符”)
3、查询插入的点101 :fetch prop on test 101
4、创建索引长度设置为300:create tag index test_index on test(name(300))
5、重建索引:rebuild tag index test_index
6、通过索引查找test中的点101: lookup on test where test.name == “300位字符” yield test.name as name

实际结果:超过255部分一起返回,未被截断

请问文档上此处是写错了,还是属于bug。这里当时的设计初衷是什么

https://docs.nebula-graph.com.cn/2.0.1/3.ngql-guide/14.native-index-statements/1.create-native-index/
Caution

CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] <index_name> ON {<tag_name> | <edge_name>} ([prop_name_list]);

长索引会降低Storage服务的扫描性能,以及占用更多内存。建议将索引长度设置为和要被索引的最长字符串相同。索引长度最长为255,超过部分会被截断。

当前版本的处理逻辑是,最大长度255,如果超过会截断。但字段超过255时,可能会查找出多条,系统会拿真实数据再次对比,返回正确结果。

问题是目前超过255的长度没截断。按照上面的测试方法

2.0.1 按照上述语句插入数据,超过255并未截断,与文档不匹配

还是这里不做截取,只在全文索引做截取

当前普通index的逻辑是:
1)create的时候,如果是string,指定长度
2)然后插入数据的时候,index的该字段会截取定义的长度。不足的部分补’\0’

fulltext index 有255的长度限制。

也就是说:
1、创建标签:create tag test(name string)这个情况,属性不建议string,建议fixed_string类型

4、创建索引长度设置为300:create tag index test_index on test(name(300)) 。 所以后面的 name(300)的属性也不建议,还是用法就不正确

1, create index的时候,string字段指定字段的长度就行啊
2,create tag index test_index on test(name(300)) 的时候,属性超过300,截断

1 个赞