ArangoDB 查询数组的连续匹配项
ArangoDB Query for consecutive matches to an array
在 ArangoDB 中,我需要在具有整数矩阵的文档中搜索特定数量的数组连续匹配项。
示例文档 (all are int[5][5])
:
nums:
25, 32, 26, 27, 29
01, 22, 15, 17, 99
12, 14, 17, 19, 88
16, 14, 12, 17, 19
02, 08, 09, 18, 19
在 java 我有一个 int[5] example.:
22, 23, 24, 25, 26
我需要 return 所有满足以下任一条件的文档:
java 数组中至少有 4 个数字与任何矩阵行中的至少 4 个连续数字相匹配。例如。如果一个矩阵行有 22, 23, **29**, 24, 25
它不会匹配,因为数组中没有一组四个数字彼此相邻(但是,如果顺序与数组的顺序匹配并不重要)。但是,如果它是 22, 26, 23, 24
它将匹配,因为至少有四个连续的数字来自数组。例如:
**22**, 32, 26, 27, 29
**26**, 22, 15, 17, 99
**23**, 14, 17, 19, 88
**24**, 14, 12, 17, 19
02, 08, 09, 18, 19
与上面相同,但在任何矩阵列而不是行
20, 01, 02, 03, 08
01,*22,*23*,*25*,*24*
12, 14, 17, 19, 88
16, 14, 12, 17, 19
02, 08, 09, 18, 19
与最后两个相同但在对角线上,而不是在一行或一列中
**22**, 32, 26, 27, 29 01, 02, 03, 04, 05
01, **23**, 15, 17, 99 06, 07, 08, **24**, 10
12, 14, **26**, 19, 88 11, 12, **23**, 14, 15
16, 14, 12, **25**, 19 16, **25**, 18, 19, 20
02, 08, 09, 18, 19 **22**, 22, 23, 24, 25
任何矩阵中没有两个数字是相同的。例如,在整个矩阵中不会出现超过一次的数字1
。
我不太确定如何解决这样的问题。目前我正在查询矩阵中至少有 4 个数字与数组的数字匹配的所有文档,但我想有一种方法可以查询这个。我能想到的就是生成每个可能的矩阵的组合来查询匹配矩阵,这显然是不现实的。
更新:
关于建议使用 JS 扩展的答案,如何解决这个问题?我对 ArangoDB 扩展不熟悉。
使用纯 AQL 执行此操作可能有点做作,我建议检查添加您自己的 JS 函数以匹配它(参见 https://docs.arangodb.com/AqlExtending/index.html)
用 JS 做起来会很容易,并用它作为过滤匹配。
在 ArangoDB 中,我需要在具有整数矩阵的文档中搜索特定数量的数组连续匹配项。
示例文档 (all are int[5][5])
:
nums:
25, 32, 26, 27, 29
01, 22, 15, 17, 99
12, 14, 17, 19, 88
16, 14, 12, 17, 19
02, 08, 09, 18, 19
在 java 我有一个 int[5] example.:
22, 23, 24, 25, 26
我需要 return 所有满足以下任一条件的文档:
java 数组中至少有 4 个数字与任何矩阵行中的至少 4 个连续数字相匹配。例如。如果一个矩阵行有 22, 23, **29**, 24, 25
它不会匹配,因为数组中没有一组四个数字彼此相邻(但是,如果顺序与数组的顺序匹配并不重要)。但是,如果它是 22, 26, 23, 24
它将匹配,因为至少有四个连续的数字来自数组。例如:
**22**, 32, 26, 27, 29
**26**, 22, 15, 17, 99
**23**, 14, 17, 19, 88
**24**, 14, 12, 17, 19
02, 08, 09, 18, 19
与上面相同,但在任何矩阵列而不是行
20, 01, 02, 03, 08
01,*22,*23*,*25*,*24*
12, 14, 17, 19, 88
16, 14, 12, 17, 19
02, 08, 09, 18, 19
与最后两个相同但在对角线上,而不是在一行或一列中
**22**, 32, 26, 27, 29 01, 02, 03, 04, 05
01, **23**, 15, 17, 99 06, 07, 08, **24**, 10
12, 14, **26**, 19, 88 11, 12, **23**, 14, 15
16, 14, 12, **25**, 19 16, **25**, 18, 19, 20
02, 08, 09, 18, 19 **22**, 22, 23, 24, 25
任何矩阵中没有两个数字是相同的。例如,在整个矩阵中不会出现超过一次的数字1
。
我不太确定如何解决这样的问题。目前我正在查询矩阵中至少有 4 个数字与数组的数字匹配的所有文档,但我想有一种方法可以查询这个。我能想到的就是生成每个可能的矩阵的组合来查询匹配矩阵,这显然是不现实的。
更新: 关于建议使用 JS 扩展的答案,如何解决这个问题?我对 ArangoDB 扩展不熟悉。
使用纯 AQL 执行此操作可能有点做作,我建议检查添加您自己的 JS 函数以匹配它(参见 https://docs.arangodb.com/AqlExtending/index.html)
用 JS 做起来会很容易,并用它作为过滤匹配。