【问题标题】:Neo4j/Spring Data Neo4j 4 index and case of charactersNeo4j/Spring Data Neo4j 4 索引和字符大小写
【发布时间】:2017-04-06 16:40:45
【问题描述】:

我有以下 SDN 4 节点实体:

@NodeEntity
public class Product {

    @Index(unique = false)
    private String name;

...

}

在这个实体内部,我添加了name 属性并声明了一个索引。

现在我将按产品名称实现不区分大小写的搜索。

我创建了一个 SDN 4 存储库方法:

@Query("MATCH (p:Product) WHERE LOWER(d.name) = LOWER({name}) RETURN p")
Product findByName(@Param("name") String name);

为了搜索我使用以下 Cypher 的产品:LOWER(d.name) = LOWER({name})

我认为索引在这种情况下不起作用,因为我将字符串小写。

在 Neo4j/SDN 4 中让索引在这里工作的正确方法是什么?

【问题讨论】:

    标签: neo4j cypher spring-data-neo4j-4


    【解决方案1】:

    如果您不需要以原始大小写存储名称,则将名称转换为小写,然后再将其存储到数据库中。

    如果您确实需要原始大小写的名称,那么您可以添加一个额外的属性(例如“lower_name”)来存储小写名称。您可以索引该属性并将其用于索引比较。

    第三种选择是使用legacy indexing,它使用起来要复杂得多,不再受欢迎。但是,它确实支持不区分大小写的索引(参见this page 上的第二个示例)。

    【讨论】:

    • 感谢您的回答。我只是想知道,或者这是使用 Neo4j 和 SDN 4 实现它的唯一方法。例如,在 PostgreSQL 中,我们可以创建 CREATE INDEX lower_case_name ON users ((lower(name))); 然后使用它。我们在 Neo4j/SDN 有类似的东西吗?
    • 该类型的功能不存在。但是,请参阅我的第三个选项的更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多