node.js - Gremlin 如何同时包含数字和字符串搜索

标签 node.js gremlin amazon-neptune

Neptune 1.0.2.1 + Gremlin + Nodejs。

我有一个顶点和属性,例如顶点 - 设备,属性 - 测试,测试属性可以存储不同类型的数据,例如数字和字符串

顶点 1 - 测试 = ['ABCD','xyz'] 顶点 2 - 测试 = [123,'XYZ']

我想做一个“包含”搜索,例如无论数据类型如何,Test=A 或 Test=123。

我正在尝试

queryText = 'BC' //this throw error
or queryText = 123 //this actually works
//I expect both case should hit the result.

g.V().hasLabel('Device').or(__.has('Test', parseFloat(queryText)), __.has('Test', textP.containing(queryText)));

但出现“InternalFailureException\”错误

无论数据类型如何,我都可以编写单个查询吗?

如果不可能,或者至少让 textP.containing 与多个查询一起工作,假设我知道数据类型?现在,如果属性包含数字,则包含搜索会抛出错误

最佳答案

看起来您在 or() 步骤内的错误位置放置了右括号。您需要在逗号之前关闭第一个 has 步骤。

在你的例子中

g.V().hasLabel('Device').or(__.has('Test', parseFloat(queryText), __.has('Test', textP.containing(queryText))));

应该是

g.V().hasLabel('Device').or(__.has('Test', parseFloat(queryText)), __.has('Test', textP.containing(queryText)));

编辑和更新

通过更正的查询和有关包含同一属性键的不同类型的数据模型的附加说明,我能够重现您所看到的内容。然而,使用 TinkerGraph 和 Neptune 可以看到相同的行为。生成的错误消息略有不同,但含义相同。鉴于 TinkerGraph 的行为方式相同,我认为 Neptune 的行为与“引用”实现一致。也就是说,这提出了一个问题:TextP 谓词是否应该更智能并在尝试测试之前检查属性的类型。

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('test').property('x',12.5)
==>v[0]
gremlin> g.addV('test').property('x','ABCDEF')
==>v[2]
gremlin> g.V().hasLabel('test').or(has('x',12.3),has('x',TextP.containing('CDE')))
java.math.BigDecimal cannot be cast to java.lang.String
Type ':help' or ':h' for help.
Display stack trace? [yN]  

其他更新

我创建了一个 Jira 问题,以便 Apache TinkerPop 社区可以考虑对 TextP 谓词进行更改。

https://issues.apache.org/jira/browse/TINKERPOP-2375

关于node.js - Gremlin 如何同时包含数字和字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62013568/

相关文章:

elasticsearch - 在 Elasticsearch 查询中获取路径下的嵌套对象不是嵌套类型

TITAN- 并行查询 - org.apache.tinkerpop.gremlin.driver.Client.submit 处的并发超时异常

datastax - 使用 gremlin 将数据从 datastax 流式传输到 gephi

bulk-load - Gremlin 批量加载 csv 日期格式

javascript - 使用@UploadFile上传文件期间接收到的对象类型

javascript - 如何在browserify上使用jquery、two.js、processing.js等浏览器库?

javascript - node.js request.get 用 html 正文响应,忽略 404 状态

node.js - 使用 Nodemailer nodejs 发送邮件的现代 Oauth2 身份验证

python - gremlin-python 不是可用的 GremlinScriptEngine

java - 编译 gremlin 遍历查询的响应