使用 Neo4jClient 进行不区分大小写的搜索
Case Insensitive Search with Neo4jClient
只是一个快速简单的方法,我需要能够在不区分大小写的情况下搜索我们的数据库,我知道该怎么做,只是不使用 Neo4jClient。这是代码:
client.Cypher
.Match("(person:Person)")
.Where((Person person) => person.Email == search)
其中 'search' 是传递给方法的字符串类型的参数。我读过使用 =~ '(?i)text' 的作品,但这不允许我传递参数,我试过这个:
client.Cypher
.Match("(person:Person)")
.Where((Person person) => person.Email =~ "(?i){terms}")
.WithParam("terms",search)
但它不喜欢这样。
我希望能够不区分大小写进行搜索,如果可能的话同时使用 LIKE(或 ILIKE,因为它似乎用于模式匹配)。
谢谢
编辑并回答
最终的代码是这样的:
return client.Cypher
.Match("(person:Person)")
.Where("person.Email =~ {terms}")
.OrWhere("person.Name =~ {terms}")
.WithParam("terms", "(?ui).*" + search + ".*")
.Return<Person>("person").Results.ToList();
这正是我想要的。
还接受了一个小写字段的建议,其中的值,我们已经在帐户中有一个,因此登录名不区分大小写,我将在电子邮件和名称字段上执行此操作,似乎比使用 toLower() 更好(在 Cypher 或 C# 中)
非常感谢@Stefan Armbruster 的帮助。
您不能有部分参数。而是将 (?i)
添加到参数值:
query: person.Email =~ term
parameter: term = "(?i)<myvalue"
注意 1:您需要使用 (?ui)
来优雅地处理非 ascii 区分大小写(例如德语变音符号)。
注意 2:=~
运算符不受索引支持,因此上面的查询将触及每个 Person
节点并将正则表达式应用于 属性 值。在 Neo4j 2.3 中,将有一个索引支持 LIKE
支持字符串前缀匹配。
如果要使用基于索引的不区分大小写的搜索,推荐的方法是将 属性 值存储为小写(Cypher 有一个 toLower
函数),然后进行精确匹配小写搜索值。
只是一个快速简单的方法,我需要能够在不区分大小写的情况下搜索我们的数据库,我知道该怎么做,只是不使用 Neo4jClient。这是代码:
client.Cypher
.Match("(person:Person)")
.Where((Person person) => person.Email == search)
其中 'search' 是传递给方法的字符串类型的参数。我读过使用 =~ '(?i)text' 的作品,但这不允许我传递参数,我试过这个:
client.Cypher
.Match("(person:Person)")
.Where((Person person) => person.Email =~ "(?i){terms}")
.WithParam("terms",search)
但它不喜欢这样。
我希望能够不区分大小写进行搜索,如果可能的话同时使用 LIKE(或 ILIKE,因为它似乎用于模式匹配)。
谢谢
编辑并回答 最终的代码是这样的:
return client.Cypher
.Match("(person:Person)")
.Where("person.Email =~ {terms}")
.OrWhere("person.Name =~ {terms}")
.WithParam("terms", "(?ui).*" + search + ".*")
.Return<Person>("person").Results.ToList();
这正是我想要的。 还接受了一个小写字段的建议,其中的值,我们已经在帐户中有一个,因此登录名不区分大小写,我将在电子邮件和名称字段上执行此操作,似乎比使用 toLower() 更好(在 Cypher 或 C# 中)
非常感谢@Stefan Armbruster 的帮助。
您不能有部分参数。而是将 (?i)
添加到参数值:
query: person.Email =~ term
parameter: term = "(?i)<myvalue"
注意 1:您需要使用 (?ui)
来优雅地处理非 ascii 区分大小写(例如德语变音符号)。
注意 2:=~
运算符不受索引支持,因此上面的查询将触及每个 Person
节点并将正则表达式应用于 属性 值。在 Neo4j 2.3 中,将有一个索引支持 LIKE
支持字符串前缀匹配。
如果要使用基于索引的不区分大小写的搜索,推荐的方法是将 属性 值存储为小写(Cypher 有一个 toLower
函数),然后进行精确匹配小写搜索值。