在 Java 项目中使用 Redis Labs 的 RedishGraph。当我将 map 属性作为输入传递给 Cypher 查询时出现以下错误。
ObjectMapper oMapper = new ObjectMapper();
Person person=new Person(2, "Jagadeesh", 23);
Map<String, Object> personMap = oMapper.convertValue(person, Map.class);
Map<String, Object> props=new HashMap<>();
props.put("props", personMap);
ResultSet rs1 = graph.query("UserGraph", "CREATE ($props)", props);
出现意外错误(类型=内部服务器错误,状态=500)。
redis.clients.jedis.exceptions.JedisDataException:errMsg:无效输入“p”:预期的 PROFILE 行:1,列:4,偏移量:3 errCtx:props={id=2,name=Jagadeesh,age=23} CREATE( $props) errCtxOffset: 3
最佳答案
免责声明:我是 RedisGraph 的工程师之一。
首先,我们暂时不支持将 map 作为 RedisGraph 中的 native 数据类型,因此很遗憾,目前不支持您的查询。
第二,你能分享一下你使用的是哪个版本的 RedisGraph 吗?我在我们最新的 docker 镜像 (docker run -p 6379:6379 --rm redislabs/redisgraph:latest
) 上执行了以下代码
@Test
public void testStackOverflowQuestion(){
RedisGraph graph = new RedisGraph();
Map<String, Object> props = new HashMap<>();
props.put("id", 2);
props.put("name", "Jagadeesh");
props.put("age", 23);
graph.query("UserGraph", "CREATE ($props)", props);
}
并且响应似乎更适合未支持的数据类型:
com.redislabs.redisgraph.exceptions.JRedisGraphCompileTimeException: redis.clients.jedis.exceptions.JedisDataException: Encountered unhandled type in inlined properties.
评论后编辑:
我将测试修改为
@Test
public void testStackOverflowQuestion(){
RedisGraph graph = new RedisGraph();
Map<String, Object> personMap = new HashMap<>();
personMap.put("id", 2);
personMap.put("name", "Jagadeesh");
personMap.put("age", 23);
Map<String, Object> props = new HashMap<>();
props.put("props", personMap);
graph.query("UserGraph", "CREATE ($props)", props);
}
我得到了和你一样的回应。
这是我们的解析器错误。我们的解析器期望映射键值对用冒号分隔
key:value
当前调用map的JRedisGraph中map对象的序列化格式错误导致的错误toString()
将其序列化为 key = value
的方法所以我们的解析器跳过参数解析并将 map 视为实际查询的一部分。通过申请
MONITOR
在 redis-cli 中,您的查询会产生以下命令:"graph.QUERY" "UserGraph" "CYPHER props={name=Jagadeesh, id=2, age=23} CREATE ($props)" "--COMPACT"
如您所见, map 发送到key=value
格式。我手动更改了查询并使用
key:value
在 redis-cli 中发送它格式并得到预期的响应:127.0.0.1:6379> graph.query g "CYPHER props={name:Jagadeesh, id:2, age:23} CREATE ($props)"
(error) Encountered unhandled type in inlined properties.
关于Java客户端密码查询与RedisGraph redis.clients.jedis.exceptions.JedisDataException : errMsg: Invalid input 'p' : expected PROFILE line: 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62186539/