vik*_*are 4 search diacritics text-search mongodb accent-insensitive
我有一个具有以下结构的文档集合
uid, name
Run Code Online (Sandbox Code Playgroud)
有索引
db.Collection.createIndex({name: "text"})
Run Code Online (Sandbox Code Playgroud)
它包含以下数据
1, iphone
2, iphóne
3, iphonë
4, iphónë
Run Code Online (Sandbox Code Playgroud)
当我正在进行文本搜索时,iphone
我只获得了两条记录,这是意料之外的
actual output
--------------
1, iphone
2, iphóne
Run Code Online (Sandbox Code Playgroud)
如果我搜索 iphonë
db.Collection.find( { $text: { $search: "iphonë"} } );
I am getting
---------------------
3, iphonë
4, iphónë
Run Code Online (Sandbox Code Playgroud)
但实际上我期待以下输出
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { $text: { $search: "iphónë"} } );
Expected output
------------------
1, iphone
2, iphóne
3, iphonë
4, iphónë
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?如何通过搜索iphone或iphónë?获得高于预期的输出?
从mongodb 3.2开始,文本索引是变音符号不敏感的:
对于版本3,文本索引是变音符号不敏感的.也就是说,索引不区分包含变音符号的字符和它们的非标记对应字符,例如é,ê和e.更具体地说,文本索引在Unicode 8.0字符数据库支持列表中剥离分类为变音符号的字符.
所以以下查询应该有效:
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
Run Code Online (Sandbox Code Playgroud)
但看起来像dieresis(¨)有一个错误,即使它在unicode 8.0列表中被称为变音符号(在JIRA上发布:SERVER-29918)
从mongodb 3.4你可以使用collation,它允许你执行这种查询:
例如,要获得预期的输出,请运行以下查询:
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
Run Code Online (Sandbox Code Playgroud)
这将输出:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
Run Code Online (Sandbox Code Playgroud)
在整理中,strength是执行的比较级别
| 归档时间: |
|
| 查看次数: |
2394 次 |
| 最近记录: |