【发布时间】:2014-01-13 09:30:02
【问题描述】:
我对 Neo4J 有点陌生:我使用 SpringData 构建了一个使用 Neo4j 的应用程序。 我有一个包含“名称”和“年份”属性的@NodeEntity,并且通常使用按名称和年份进行搜索,我在这两个字段上定义了一个复合索引:
@Getter
@Setter
@NoArgsConstructor
@ToString(of = { "name", "year" })
public abstract class BaseContent<D extends BaseContentDTO> extends BaseEntity {
@Indexed(indexName = "search_content")
protected String name;
@Indexed(indexName = "search_content")
protected Integer year;
}
我正在尝试使用此复合索引按名称和年份查询内容。 此查询在 Neo4j 网络管理员中有效,但在我尝试使用 SpringData 运行时无效。
这是我在 SpringData 中的查询:
@Query("start movie=node:search_content(\"name={name} AND year={year}\") return movie;")
public T findByNameAndYear(@Param("name") String name, @Param("year") Integer year);
我得到的错误:
org.apache.cxf.interceptor.Fault: null at
BadInputException
我不明白我做错了什么。 我尝试了不同的变体,例如使用 {0} 和 {1} 代替参数名称,但这也无济于事。
顺便说一下,这是 Cypher 查询,在 web-admin 中运行良好:
start movie=node:search_content('name:Salt AND year:2010') return movie.name, movie.year;
如果我在 @query 中使用 ':' 而不是像这样的 '=':
@Query("start movie=node:search_content(\"name:{name} AND year:{year}\") return movie;")
我得到这个错误:
java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: org.apache.lucene.queryParser.ParseException: Cannot parse 'name:{name} AND year:{year}': Encountered " "}" "} "" at line 1, column 10.
Was expecting one of:
"TO" ...
<RANGEEX_QUOTED> ...
<RANGEEX_GOOP> ...
at
非常感谢您的帮助,
卡梅尔
【问题讨论】:
-
你试过这个:
@Query("start movie=node:search_content(name={name} AND year={year}) return movie.name, movie.year)吗?我的意思是没有任何\" -
我有。这是它抛出的异常:java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: Unclosed parenthesis "start movie=node:search_content(name={name} AND year={year}) return movie;" ^ 在语法异常
-
我实际上对查询结构有疑问。你为什么不拿出你的实际查询在
()之外查找。我的意思是在括号内,您需要明确提及密码会注意的一些值。@Query("start movie=node:search_content(name='Matrix') WHERE movie.year={year} return movie)这将根据索引search_content和一个属性为name='Matrix'搜索所有节点。我不确定,但请尝试一下。 -
基本上
()以更广泛的方式应用于给定的索引。在上面的评论中,我已经明确提到它 name='Matrix' 但它可能具有其他值,例如 className='org.abc.Movie' 或类似的东西。 -
最后一个有效。谢谢(尽管我仍然不明白为什么在管理员上工作的密码查询在 SpringData 上不起作用)。再次感谢:)
标签: neo4j spring-data spring-data-neo4j