MongoDB匹配忽略重音的部分文字变音符号

问题描述

我有两个应该与简单文本匹配的字段。

我目前正在使用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')] 
            ]
        ]
    ]
]];

缺少的是,我想忽略字段namecommonName中的重音,例如,如果content.itemList.name“foöBàr” 和查询是“ obar” (),我应该在结果中得到它。

编辑:经过几天的尝试,我还没有找到解决方法。

我认为微不足道的事情应该在MongoDB中轻松完成。

我尝试过的其他事情:

  • 为我要搜索的字段创建了文本索引
  • 使用排序规则,这显然不适用于Regex

示例文件

{
    lastname: "Mbappé",firstname: "Kylian",name: "Kylian Mbappé"
    otherfields: 123
}

我想要什么:

与姓氏,名字或部分字符串(连字符,appe,mbappe等)匹配的查询,不区分大小写,不区分变音符号。

好的匹配项应该是:“ Mbappe”,“ appe”,“mbappé”,“ Kylian”,“ kylian mbappe”

解决方法

确实不支持将正则表达式与排序规则一起使用Use of collation in mongodb $regex

我想为了使这项工作可行,我将创建一个变通方法,例如不带变音符号的MongoDB数据中的字段,以便将其用于搜索功能。

使用示例文档

{
    lastname: "Mbappé",firstname: "Kylian",name: "Kylian Mbappé"
    otherfields: 123
    name_clean: "Kylian Mbappe" // this is new
}

我会在原始帖子中发表评论,但是Stack Overflow说我需要50点声望:(

,

我认为像这样在mongodb中尝试它会起作用。

db.users.find({name:{$ regex:'appe',$ options:'i'},firstname:{$ regex:'lian',$ options:'i'},lastname:{$ regex:'appé',$ options:'i'}})

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...