Neo4J - SpringData - 使用复合查询的@query

时间:2013-12-25 12:22:32

标签: neo4j spring-data spring-data-neo4j

我是Neo4J的新手:我已经使用SpringData构建了一个使用Neo4j的应用程序。 我有一个包含'name'和'year'属性的@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-admin,但当我尝试使用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查询,在网络管理员中运作良好:

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

非常感谢您的帮助,

卡梅尔

1 个答案:

答案 0 :(得分:2)

尝试取出你的实际查询()。我的意思是在括号内你需要明确提到一些关于cypher将要注意的值 @Query("start movie=node:search_content(name='Matrix') WHERE movie.year={year} return movie)
这将基于索引 search_content 搜索所有节点,并将一个属性搜索为name='Matrix',但它可能具有其他值,如className='org.abc.Movie'或类似的值。