首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RedisGraph redis.clients.jedis.exceptions.JedisDataException: errMsg的Java客户端Cypher查询:输入‘p’无效:预期配置文件行:1

问使用RedisGraph redis.clients.jedis.exceptions.JedisDataException: errMsg的Java客户端Cypher查询:输入‘p’无效:预期配置文件行:1
EN

Stack Overflow用户
提问于 2020-06-04 11:44:07
回答 1查看 215关注 0票数 1

在Java项目中使用Redis实验室的RedishGraph。当我将Map Properties作为输入传递给Cypher query时,出现以下错误。

代码语言:javascript
复制
 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

EN

回答 1

Stack Overflow用户

发布于 2020-06-10 16:32:11

免责声明:我是RedisGraph的工程师之一。

首先,我们暂时不支持将地图作为RedisGraph中的原生数据类型,因此,不幸的是,您的查询目前不受支持。

其次,您能分享一下您使用的是哪个版本的RedisGraph吗?我在最新的docker镜像(docker run -p 6379:6379 --rm redislabs/redisgraph:latest)上执行了以下代码

代码语言:javascript
复制
    @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);
    }

而且响应似乎更适合不支持的数据类型:

代码语言:javascript
复制
com.redislabs.redisgraph.exceptions.JRedisGraphCompileTimeException: redis.clients.jedis.exceptions.JedisDataException: Encountered unhandled type in inlined properties.

注释后编辑:

我将测试修改为

代码语言:javascript
复制
    @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发送了它,并获得了预期的响应:

代码语言:javascript
复制
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.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62186539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档