跳转至

hash函数

hash()函数返回参数的哈希值。其参数可以是数字、字符串、列表、布尔值、NULL等类型的值,或者计算结果为这些类型的表达式。

hash()函数采用MurmurHash2算法,种子(seed)为0xc70f6907UL。您可以在MurmurHahs2.h中查看其源代码。

说明: 在有10亿个点的情况下,发生碰撞的概率大约是1/10。边的数量与碰撞的概率无关。

在Java中的调用方式如下:

MurmurHash2.hash64("to_be_hashed".getBytes(),"to_be_hashed".getBytes().length, 0xc70f6907)

历史版本兼容性

nGQL 1.0不支持字符串类型的VID,一种常用的处理方式是用hash函数获取字符串的哈希值,然后将该值设置为VID。但nGQL 2.0同时支持了字符串和整数类型的VID,所以您无需再使用这种方式设置VID。

计算数字的哈希值

nebula> YIELD hash(-123);
+--------------+
| hash(-(123)) |
+--------------+
| -123         |
+--------------+

计算字符串的哈希值

nebula> YIELD hash("to_be_hashed");
+----------------------+
| hash(to_be_hashed)   |
+----------------------+
| -1098333533029391540 |
+----------------------+

计算列表的哈希值

nebula> YIELD hash([1,2,3]);
+----------------+
| hash([1,2,3])  |
+----------------+
| 11093822460243 |
+----------------+

计算布尔值的哈希值

nebula> YIELD hash(true);
+------------+
| hash(true) |
+------------+
| 1          |
+------------+

nebula> YIELD hash(false);
+-------------+
| hash(false) |
+-------------+
| 0           |
+-------------+

计算NULL的哈希值

nebula> YIELD hash(NULL);
+------------+
| hash(NULL) |
+------------+
| -1         |
+------------+

计算表达式的哈希值

nebula> YIELD hash(toLower("HELLO NEBULA"));
+-------------------------------+
| hash(toLower("HELLO NEBULA")) |
+-------------------------------+
| -8481157362655072082          |
+-------------------------------+

最后更新: April 1, 2021
Back to top