Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在Mongo DB文本搜索中搜索文本忽略并合并白色字符串&;正则表达式_Regex_Mongodb_Search_Text_Full Text Search - Fatal编程技术网

Regex 在Mongo DB文本搜索中搜索文本忽略并合并白色字符串&;正则表达式

Regex 在Mongo DB文本搜索中搜索文本忽略并合并白色字符串&;正则表达式,regex,mongodb,search,text,full-text-search,Regex,Mongodb,Search,Text,Full Text Search,数据库: {title: "Honda CBR500"}, {title: "Honda CBR500R"}, {title: "Honda CBR 500R"}, {title: "Honda CBR 500 R"}, {title: "Honda CBR 250 R"}, 例如,我希望我的MongoDB文本搜索在查找“CBR”时返回所有这些结果,而不是精确匹配的结果,并且在查找“CBR500”时返回除“CBR 250”以外的所有结果 当前(默认mongo文本搜索行为)如果我查找“CBR50

数据库:

{title: "Honda CBR500"},
{title: "Honda CBR500R"},
{title: "Honda CBR 500R"},
{title: "Honda CBR 500 R"},
{title: "Honda CBR 250 R"},
例如,我希望我的MongoDB文本搜索在查找“CBR”时返回所有这些结果,而不是精确匹配的结果,并且在查找“CBR500”时返回除“CBR 250”以外的所有结果

当前(默认mongo文本搜索行为)如果我查找“CBR500”,我只得到:

{title: "Honda CBR500"}
而不是

{title: "Honda CBR500"},
{title: "Honda CBR500R"},
{title: "Honda CBR 500R"},
{title: "Honda CBR 500 R"}
我正在考虑添加一个附加字段,例如normalized_title,并使用正则表达式将诸如CBR500R之类的词拆分为关键字示例:

{title: "Honda CBR500", normalised_title: "CBR 500"},
{title: "Honda CBR500R", normalised_title: "CBR 500 R CBR500 500R},
{title: "Honda CBR 500R", normalised_title: "CBR500R CBR 500 CBR 500 R"},
{title: "Honda CBR 500 R", normalised_title: "CBR 500R CBR 500 R"},
{title: "Honda CBR 250 R", normalised_title: "CBR250R CBR 250 R 250R"}}
这将使我能够进行组合文本搜索,在查找CBR时返回全部,在使用CBR 500时返回全部(然后按分数排序,并在底部获得250分)


提前谢谢

恐怕这会减慢搜索速度。我不是100%确定mongo可以做到这一点,但是如果我没有找到一个可扩展的解决方案,我可能不得不求助于它。谢谢你的帮助!CBR也可以是任何真正的东西。任何1到4位数字,如“斯巴鲁J10”和“斯巴鲁J10”,不幸的是,您缺少全文搜索的选项。mongodb词干分析过程消除了停止词,认为CBR和CBR500是两个不同的词。但是,您可以使用普通正则表达式来实现相同的解决方案,但性能不太理想。e、 g.
db.cars.find({title:/CBR | 500/ig})
将返回标题中包含单词
CBR或500的所有文档。在您的情况下,所有五个文档都是您提到的above@sln,regex相当慢,除非我们匹配单词的开头。例如
/^(HONDA)/
会很快,但
/CBR/
不会,因为正则表达式必须搜索整个字符串以寻找可能性。我将向您解释。让我们假设您有一个100个单词的字符串,而普通正则表达式必须在其中搜索一些文本。正则表达式可能在字符串的开头甚至结尾找到这个词。当所需的单词出现在字符串的开头时,它将比出现在字符串末尾的单词快得多。不管你用什么语言,这都是正确的。