Neo4j / Spring Data Neo4j 4索引和字符大小写

时间:2017-04-06 16:40:46

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

我有一个以下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在这里使索引工作的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

如果您不需要在原始案例中存储名称,则在将名称存储到数据库之前将其转换为小写。

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

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