当前位置: 首页 > 知识库问答 >
问题:

spring数据neo4j类查询不工作

易英奕
2023-03-14

我是neo4j spring数据的新手,我尝试执行的查询不是在我的spring boot应用程序上工作,而是在neo4j web界面上工作。

我在数据库上有3个节点:“Oracle”、“Java”和“Cloud”我正在尝试运行的查询:

MATCH(interest:Interest) WHERE interest.name =~ '(?i).*cl.*' RETURN interest

因此,使用neo4j web界面,如果我输入“CL”,它将返回“Oracle”和“Cloud”,这是正确的。

使用spring数据,我得到了所有3个结果,这是错误的。

我的存储库接口:

@Query("MATCH(interest:Interest) WHERE interest.name =~ '(?i).*{0}.*' RETURN interest")
Set<Interest> getKindOf(String value);

我的rest控制器:

@ResponseBody
public Collection<Interest> getPersonByName(@PathVariable String name) {
    Set<Interest> interests = interestRepository.getKindOf(name);
    return interests;
}

查看spring boot日志,我可以看到查询:

INFO 12716 --- [nio-2016-exec-1] o.n.o.drivers.http.request.HttpRequest   : Thread: 22, url: http://localhost:7474/db/data/transaction/commit, request: {"statements":[{"statement":"MATCH(interest:Interest) WHERE interest.name =~ '(?i).*{0}.*' RETURN interest","parameters":{"0":"cl"},"resultDataContents":["graph"],"includeStats":false}]}

所以,问题是:为什么我使用neo4j web界面(OK)得到2个结果,而使用spring数据(NOK)得到3个结果?

谢谢你的帮助!

罗德里戈

共有1个答案

闾丘鸣
2023-03-14

完整的正则表达式应作为参数(也称为cypher查询参数)传递

@Query("MATCH(interest:Interest) WHERE interest.name =~ {0} RETURN interest")
Set<Interest> getKindOf(String value);

--

@ResponseBody
public Collection<Interest> getPersonByName(@PathVariable String name) {
    String regex = "(?i).*" + name + ".*";
    Set<Interest> interests = interestRepository.getKindOf(regex);
    return interests;
}

注意,这与cypher参数处理有关,这不是sdn特有的

 类似资料:
  • 我试图编写一个返回大量数据(200个节点)的查询。节点非常简单: 我最初使用Spring Data Neo4j模板接口,但在返回大约100个节点后发现它非常慢。 所以,我的问题是:是否有一种方法可以提供标签作为Cypher查询的一部分,以防止需要再次查询每个节点?或者,除此之外,是否有一种方法可以为SDN提供一个包含标签和属性的并将其转换为POJO? 注意:我意识到SDN团队正在未来的版本中完全使

  • 我正在尝试使用neo4j构建一个推荐引擎,并使用spring-data-neo4j作为持久层。我发现spring数据执行的cypher查询会给出结果,但是对于重复的对象,使用相同的数据集在neo4j浏览器上执行的相同查询会产生预期的结果。 下面是执行的查询(我通过启用调试获得)匹配(u:User)-[r:RATED]-(m:Movie)-[:HAS\u Movie]-(g:Genre)-[:HAS

  • 但结果是一样的。 这是我的.hbm.xml文件中的内容: 对于用户: 我做错了什么?如果查询参数不是“简单”类型,我需要做一些特殊的事情吗?

  • 我想让用户节点中的userName属性作为唯一。我使用了下面的代码,但它没有在Neo4j数据库中创建唯一的约束。 仅供参考,我使用的是Neo4j服务器版本:3.3。6(社区)带Spring靴2 但是如果我自己在Neo4j浏览器中创建一个约束,它就会工作。 有没有一种方法可以强制Spring Data Neo4J创建唯一的属性,而不需要自己在数据库中创建它们?

  • 我是Spring data neo4j的新手,我对GraphRepository有一些错误/问题。 我第一次有了这个: 但是阅读一些文档,存储库已经提供了这样的方法。我不需要写它们。 这是我的产品域名。 这是我的实验班 未检测到查找字节 Id 这正常吗? 这是我的pom.xml

  • 太长别读:@Depth(value=-1)抛出空指针,忽略1以上的其他值 在我的Spring Boot with Neo4j项目中,我有3个简单的实体与关系: 我创建了一个简单的图,如下所示: 使用以下存储库: 以及以下代码: 要检索与上图所示相同的图表(取自实际的neo4j仪表板),我执行,其中包含,然后打印保存的度量和检索的度量: 无论深度的值如何,我都无法获取包含所有子节点的Metric节点