我有两个应该与简单文本匹配的字段。
我目前正在使用 Jenssegers'Laravel Mongodb ( https://github.com/jenssegers/laravel-mongodb )
现在的代码是这样的,几乎可以像我想要的那样工作:
$nameFilter = [[
'$match' =>
[
'$or' =>
[
[
'content.itemList.name' => ['$regex' => new Regex($request->q, 'i')]
],
[
'content.itemList.commonName' => ['$regex' => new Regex($request->q, 'i')]
]
]
]
]];
缺少的是我想忽略字段中的重音name
和commonName
,因此例如,如果content.itemList.name
是“foöBàr”并且查询是“obar”,我应该在结果中得到它。
编辑:经过几天的尝试,我还没有找到解决方案。
我认为应该在 MongoDB 中轻松完成一些如此微不足道的事情。
我尝试过的其他事情:
- 为我要搜索的字段创建了一个文本索引
- 使用排序规则,这显然不适用于正则表达式
示例文档
{
lastname: "Mbappé",
firstname: "Kylian",
name: "Kylian Mbappé"
otherfields: 123
}
我想要的是:
匹配任何姓氏、名字或带有部分字符串(lian、appe、mbappe 等)的名称的查询,不区分大小写和变音符号(重音)。
好的匹配应该是,例如:“Mbappe”“appe”“mbapp锓Kylian”“kylian mbappe”