【问题标题】:PyMongo $regex across all text fields and subfieldsPyMongo $regex 跨所有文本字段和子字段
【发布时间】:2021-07-16 02:44:57
【问题描述】:

我有一个相当复杂的 Mongo 集合,我正在尝试实现详细的匹配标准。我已经在所有字段中创建了一个文本索引,如下所示:

db.create_index([("$**", "text")], name='allTextFields')

我在 PyMongo 中将它用于一些简单的搜索词(例如,“移民”),如下所示:

db.find({'$text': {'$search': "immigration"}

但是,我需要匹配某些足够通用的术语,以至于需要正则表达式类型规范。例如,我想匹配所有出现的“ice”而不找到“police”和各种其他排除项。

理想情况下,我可以创建一个搜索所有字段和子字段的正则表达式(参见下面的示例),但我不知道如何在 PyMongo(或 Mongo 中)实现这一点。

db.find({all_fields_and_subfields: {'$regex': '^ice\s*', '$options': 'i'}

有人知道怎么做吗?

【问题讨论】:

    标签: python regex mongodb mongodb-query pymongo


    【解决方案1】:

    这样做的一种方法是在文档中添加另一个字段,其中包含您要搜索的所有字段的串联,并在上面加上 $regex。

    请注意,除非您的正则表达式锚定到输入的开头,否则它们不会使用索引(因此您将进行集合扫描)。

    我很惊讶“ice”的全文查询会找到“police”,这肯定是某个地方的错误。

    您也可以考虑使用 Atlas 搜索而不是全文搜索,后者更强大但为 Atlas 专有。

    【讨论】:

      猜你喜欢
      • 2022-12-10
      • 2020-03-06
      • 2021-02-28
      • 2011-09-23
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      相关资源
      最近更新 更多