0

我正在尝试使用 $searchBeta (聚合)在 MongoDB 中进行全文搜索,并且我正在使用“正则表达式”运算符来执行此操作。这是我所拥有的 $searchBeta 的一部分,它没有按照我的预期工作:

$searchBeta: {
    regex: {
        query: '\blightn', // '\b' is the word boundary metacharacter
        path: ["name", "set_name"],
        allowAnalyzedField: true
    }
}

这是我希望表达式匹配的两个文档的示例:

{
    "name": "Lightning Bolt"
    "set_name": "Masters 25"
},
{
    "name": "Chain Lightning",
    "set_name": "Battlebond"
}

我实际得到的:

[] //empty array

如果我使用如下表达式:

$searchBeta: {
    regex: {
        query: '[a-zA-Z]'
        path: ["name", "set_name"],
        allowAnalyzedField: true
    }
}

然后我得到结果。

我无法让任何包含正则表达式元字符和/或选项的表达式起作用,所以我很确定我只是在查询字符串中输入错误。$searchBeta 正则表达式文档并没有真正涵盖如何将元字符格式化为查询字符串。此外,$searchBeta 正则表达式运算符与 $regex 不同,因为它不需要斜杠(即 "/your expression/" )。真的把我的头发拉到了如此简单的事情上,我无法弄清楚。

4

1 回答 1

0

$searchBeta将 Lucene 用于正则表达式,这与 Perl 不兼容(PCRE)并且不支持\b. 您可以在此处阅读有关Lucene 正则表达式语法的信息,并且Elastic 的文档也很有帮助。

这是ElasticSearch的一个类似问题,其中包括一些解决方法。

于 2020-04-23T17:22:19.500 回答