SpringMongo不区分大小写的搜索正则表达式

Dro*_*dme 4 regex spring case-insensitive string-matching mongodb

我正在尝试在Mongo中进行不区分大小写的搜索.基本上我想要不区分大小写的字符串匹配我正在使用正则表达式.这是我的代码

Query query = new Query( Criteria.where(propName).regex(value.toString(), "i"));
Run Code Online (Sandbox Code Playgroud)

但是上面的剂量匹配我的整个字符串(有时用空格的字符串).它返回值,即使它是一个子字符串.

例如:假设我的集合有2个值"Bill"和"Bill status",即使我的搜索是"账单状态",它也会返回"账单".即使我正在搜索字符串的子字符串,它也会返回结果对于

我试过了 Query query = new Query( Criteria.where(propName).is(value.toString()));

但以上是区分大小写的.有人可以帮忙解决这个问题.

Aja*_*mar 8

使用正则表达式搜索的不敏感搜索.input_location可能是德里,德里,德里,它适用于所有人.

Criteria.where("location").regex( Pattern.compile(input_location, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)));   
Run Code Online (Sandbox Code Playgroud)

  • 如果我只想搜索不区分大小写的内容,该怎么办。例如,如果我找到“ male”,我应该得到“ male”和“ MALE”,但是我也得到“ FEMALE”,因为它包含男性。 (2认同)

Ian*_*iel 3

正则表达式 /^bill$/i 将以不区分大小写的方式仅与“Bill”匹配。

这是一个显示这一点的示例(在 mongo shell 中):

> db.foo.insert({name: "Bill"});
> db.foo.insert({name: "Bill status"});
> db.foo.insert({name: "another Bill"});
> db.foo.find()
{ "_id" : ObjectId("5018e182a499db774b92bf25"), "name" : "Bill" }
{ "_id" : ObjectId("5018e191a499db774b92bf26"), "name" : "Bill status" }
{ "_id" : ObjectId("5018e19ba499db774b92bf27"), "name" : "another Bill" }
> db.foo.find({name: /bill/i})
{ "_id" : ObjectId("5018e182a499db774b92bf25"), "name" : "Bill" }
{ "_id" : ObjectId("5018e191a499db774b92bf26"), "name" : "Bill status" }
{ "_id" : ObjectId("5018e19ba499db774b92bf27"), "name" : "another Bill" }
> db.foo.find({name: /^bill$/i})
{ "_id" : ObjectId("5018e182a499db774b92bf25"), "name" : "Bill" }
Run Code Online (Sandbox Code Playgroud)

但是,正则表达式查询不会使用索引,除非它是左根索引(即形式为 /^prefix/)并且不使用 i 不区分大小写标志。与使用索引的查询相比,您可能会付出巨大的性能损失。因此,根据您的用例,更好的选择可能是以某种方式使用应用程序逻辑,例如:

  1. 当您将项目插入数据库时​​强制执行一个案例(例如将“bill”转换为“Bill”)。

  2. 针对您已知的案例进行搜索(例如仅针对“Bill”进行搜索)。

  • 我不是 spring-mongo 开发人员,但我建议您尝试: Query query = new Query(Criteria.where(propName).regex("^" + value.toString() + "$", "i")); (7认同)