【问题标题】:Spring Data Neo4j search and indexSpring Data Neo4j 搜索和索引
【发布时间】:2014-05-30 23:41:13
【问题描述】:

我正在使用:

  • neo4j 2.0.1
  • spring 数据 neo4j 3.0.1.RELEASE

我有一个具有属性名称的节点人,我想在该属性上使用 Lucene 语法进行搜索。我在我的存储库中使用 findByNameLike 方法,该方法非常适合 value* 或 *value 或 * 等查询。

但我需要一个像 {A* TO D*} 这样的查询。我发现了一个不推荐使用的方法 findAllByQuery("name", query) ,使用该方法我可以满足我的需求。

  1. 我想知道理解此类查询语法的未弃用的新方法是什么。

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

【问题讨论】:

    标签: lucene neo4j cypher spring-data-neo4j


    【解决方案1】:

    首先,请确保您了解legacy (deprecated) Lucene indexes 和较新的Schema indexes 之间的区别。

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

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

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

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

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

    CREATE INDEX ON :Person(name)
    

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

    【讨论】:

    • 谢谢,你帮了我很多忙!如果我使用旧索引,推送我使用 cypher 创建的节点的最佳方式是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2023-03-24
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多