我正在使用基于AJAX的查找来查找用户在文本框中搜索的名称.
我假设数据库中的所有名称都将被音译为欧洲字母表(即没有西里尔语,日语,中文).但是,名称仍将包含重音字符,例如ç,ê甚至č和ć.
像"Micic"这样的简单搜索与"Mičić"不匹配 - 而且用户的期望是它会.
AJAX查找使用正则表达式来确定匹配.我已使用此函数修改了正则表达式比较,以尝试匹配更多重音字符.但是,它有点笨拙,因为它没有考虑到所有角色.
function makeComp (input)
{
input = input.toLowerCase ();
var output = '';
for (var i = 0; i < input.length; i ++)
{
if (input.charAt (i) == 'a')
output = output + '[aàáâãäåæ]'
else if (input.charAt (i) == 'c')
output = output + '[cç]';
else if (input.charAt (i) == 'e')
output = output + '[eèéêëæ]';
else if (input.charAt (i) == 'i')
output = output + '[iìíîï]';
else if (input.charAt (i) == 'n')
output = …Run Code Online (Sandbox Code Playgroud) 在MongoDB"db.foo.find()"语法中,如何判断它是否匹配所有字母及其重音版本?
举例来说,如果我有我的数据库名称的列表:
若昂·
弗朗索瓦·
赫苏斯
我如何允许搜索字符串"Joao","Francois"或"Jesus"以匹配给定的名称?
我希望我每次都不必像这样进行搜索:
db.names.find({name : /Fr[aã...][nñ][cç][all accented o characters][all accented i characters]s/ })
正如标题所说,我试图弄清楚如何执行不区分变音符号的操作$regex在 MongoDB 中执行不区分变音符号的搜索,尽管目前我不确定这是否可能。
基本上,想象我们有一个团队集合,其中包含如下文档:
\n{ id: 1, name: "FC Bayern M\xc3\xbcnchen" },\n{ id: 2, name: "Atl\xc3\xa9tico Madrid" }\nRun Code Online (Sandbox Code Playgroud)\n对于这个集合,我创建了一个text索引name:
db.getCollection(\'teams\').createIndex({name: \'text\'});
这使我能够执行变音符号和不区分大小写的搜索。
\ndb.getCollection(\'teams\').find({ $text: { $search: "bayern" }});\ndb.getCollection(\'teams\').find({ $text: { $search: "munchen" }});\n// \xe2\x9c\x85 { id: 1, name: "FC Bayern M\xc3\xbcnchen" }\nRun Code Online (Sandbox Code Playgroud)\n但是,如果文本搜索不包含完整单词(Bayern,Munchen ),则查询不会产生任何结果:
db.getCollection(\'teams\').find({ $text: { $search: "bayer" }});\ndb.getCollection(\'teams\').find({ $text: { $search: "munc" }});\n// \xe2\x9d\x8c (no results)\nRun Code Online (Sandbox Code Playgroud)\n因此,为了使这项工作按预期进行,我需要使用$regex …