【发布时间】:2020-12-09 12:38:24
【问题描述】:
我有两个字段应该与简单文本匹配。
我目前正在使用 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”
【问题讨论】:
-
如果您使用的是 Mongodb Atlas,您可以为此使用 Atlas Search 自动完成运算符。 docs.atlas.mongodb.com/reference/atlas-search/autocomplete/…
标签: laravel mongodb diacritics accent-insensitive