Spring Data Neo4j搜索和索引

时间:2014-04-16 08:16:23

标签: lucene neo4j cypher spring-data-neo4j

我正在使用:

  • neo4j 2.0.1
  • spring data neo4j 3.0.1.RELEASE

我有一个具有属性名称的Node Person,我想在该属性上使用Lucene语法进行搜索。我在我的存储库中使用了findByNameLike方法,它非常适合查询,例如value *或* value或* etc.

但我需要一个类似{A * TO D *}的查询。我找到了一个弃用的方法findAllByQuery(“name”,query),用这种方法我可以满足我的需求。

  1. 我想知道理解这种查询语法的新方法是什么不被弃用。

  2. 我还注意到,如果我从cypher创建节点,则该节点在我的搜索中不可用。 使用SDN我认为生成的节点也会自动添加到索引中,但我不知道如何检查它以及索引名称是什么。我必须从cypher生成节点,以便在我的所有系统中都有一些基础数据。我应该在我的密码查询中添加一些特殊属性吗?

1 个答案:

答案 0 :(得分:0)

首先,请务必了解legacy (deprecated) Lucene indexes与较新Schema indexes之间的差异。

  

我想知道什么是未被弃用的新方法   这样的查询语法。

为方便起见,您必须使用SchemaIndexRepositry界面中扩展的GraphRepository方法之一。请记住,例如尚未在架构索引上实现通配符搜索。如果您想使用通配符搜索,您将有2个选项。继续使用Lucene索引(目前最好的选项),或在自定义存储库方法中使用正则表达式查询。 E.g。

MATCH (p:Person) WHERE p.name =~ ".*test.*" RETURN p
  

我还注意到,如果我从cypher创建节点,则节点不是   在我的搜索中可用。使用SDN我认为生成的节点会   也自动添加到索引,但我不知道如何检查   那是什么是索引名称。我必须从cypher生成节点   在我的所有系统中都有一些基础数据。我应该添加一些特别的   我的密码查询中的属性?

如果您正在使用Lucene索引,则不会将新条目添加到索引中。 AFAIK,你只能以编程方式。可以按如下方式创建模式索引:

CREATE INDEX ON :Person(name)

具有name属性的新条目将自动添加到索引中。同样,通配符搜索还不会使用这些索引。