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()));
但以上是区分大小写的.有人可以帮忙解决这个问题.
使用正则表达式搜索的不敏感搜索.input_location可能是德里,德里,德里,它适用于所有人.
Criteria.where("location").regex( Pattern.compile(input_location, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)));   
Run Code Online (Sandbox Code Playgroud)
        正则表达式 /^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 不区分大小写标志。与使用索引的查询相比,您可能会付出巨大的性能损失。因此,根据您的用例,更好的选择可能是以某种方式使用应用程序逻辑,例如:
当您将项目插入数据库时强制执行一个案例(例如将“bill”转换为“Bill”)。
针对您已知的案例进行搜索(例如仅针对“Bill”进行搜索)。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           10928 次  |  
        
|   最近记录:  |