Spring数据neo4j索引搜索

时间:2013-12-23 04:00:10

标签: cypher spring-data-neo4j

我正在使用neo4j索引对博客进行全文搜索,因为 findAllByQuery()存储库方法不适用于分页。我尝试在cypher中使用(跳过/限制)来实现这一点。

@Query("START blog=node:blogSearch({0}) RETURN blog ORDER BY blog.createDate DESC SKIP {1} LIMIT {2}")
Iterable<BlogGraph> findBlogsByQuery(String luceneExpression, int start, int offset);

参数: luceneExpression :“title:foo”

但我遇到了一些问题。

1,首次调用方法 findBlogsByQuery 时出现以下异常。显然,索引“ blogSearch ”尚未创建,但如何创建?如果我使用 findAllByQuery()存储库方法,索引将在我第一次调用它时创建,来自doc:http://docs.spring.io/spring-data/neo4j/docs/2.0.0.RELEASE/reference/html/#d0e2031

Error executing statement START blog=node:blogSearch({0}) RETURN blog ORDER BY   
blog.createDate DESC SKIP {1} LIMIT {2}; nested exception is 
org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing 
statement START blog=node:blogSearch({0}) RETURN blog ORDER BY blog.createDate 
DESC SKIP {1} LIMIT {2}; nested exception is org.neo4j.cypher.MissingIndexException: 
Index `blogSearch` does not exist

2,假设已经创建索引“ blogSearch ”,如果搜索文本包含空格,则会出现另一个问题(NullPointException),如下所示:

参数: luceneExpression :“title:foo foo”

但是当使用 findAllByQuery()存储库方法时,我不会发现这种情况

BlogGraph.java

@NodeEntity
public class BlogGraph {

    @GraphId Long id;

    @Indexed
    long blogId;

    @Indexed(indexName="blogSearch", indexType = IndexType.FULLTEXT)
    String title;

    ...

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为您在查询中错过了“标题”属性:

@Query("START blog=node:blogSearch(title={0}) RETURN blog ORDER BY blog.createDate DESC SKIP {1} LIMIT {2}")
Iterable<BlogGraph> findBlogsByQuery(String luceneExpression, int start, int offset);