我正在使用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;
...
任何帮助都将不胜感激。
答案 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);