我对Neo4j有点陌生:我已经构建了一个使用SpringData使用Neo4j的应用程序。我有一个@NodeEntity,它包含' name‘和' year’属性,作为常用的名称和年份搜索,我在这两个字段上定义了一个复合索引:
@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 web管理,但当我尝试使用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}而不是param名称,但这也没有帮助。
顺便说一句,这是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我真的很感谢你的帮助,
卡梅尔
发布于 2013-12-25 13:29:34
尝试取出您的实际查询,在()旁边查找。我的意思是,在括号内,您需要明确地提到一些值,密码将从中查找。
@Query("start movie=node:search_content(name='Matrix') WHERE movie.year={year} return movie)
这将根据索引search_content搜索所有节点,并搜索作为name='Matrix'的一个属性,但它可能具有其他值,如className='org.abc.Movie'或类似的值。
https://stackoverflow.com/questions/20772744
复制相似问题