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个单词的字符串,而普通正则表达式必须在其中搜索一些文本。正则表达式可能在字符串的开头甚至结尾找到这个词。当所需的单词出现在字符串的开头时,它将比出现在字符串末尾的单词快得多。不管你用什么语言,这都是正确的。