在Java项目中使用Redis实验室的RedishGraph。当我将Map Properties作为输入传递给Cypher query时,出现以下错误。
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);出现意外错误(type=Internal服务器错误,status=500)。redis.clients.jedis.exceptions.JedisDataException: errMsg:输入‘p’无效:预期配置文件行: 1,列: 4,偏移量:3 errCtx: props={id=2,name=Jagadeesh,age=23} CREATE ($props) errCtxOffset: 3
发布于 2020-06-10 16:32:11
免责声明:我是RedisGraph的工程师之一。
首先,我们暂时不支持将地图作为RedisGraph中的原生数据类型,因此,不幸的是,您的查询目前不受支持。
其次,您能分享一下您使用的是哪个版本的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);
}我得到了和你一样的回应。这就是我们的解析器错误。我们的解析器期望map键-值对由冒号key:value分隔,这是由JRedisGraph中map对象的错误序列化格式引起的错误,它当前调用map toString()方法,该方法将其序列化为key = value,因此我们的解析器跳过参数解析,并将map视为实际查询的一部分。
通过在redis-cli中应用MONITOR,您的查询将生成命令:"graph.QUERY" "UserGraph" "CYPHER props={name=Jagadeesh, id=2, age=23} CREATE ($props)" "--COMPACT",如您所见,地图以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.https://stackoverflow.com/questions/62186539
复制相似问题