python - PyMongo $regex 跨所有文本字段和子字段
问题描述
我有一个相当复杂的 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'}
有谁知道该怎么做?
解决方案
这样做的一种方法是在文档中添加另一个字段,其中包含您要搜索的所有字段的串联,并在其上添加 $regex。
请注意,除非您的正则表达式锚定到输入的开头,否则它们不会使用索引(因此您将进行集合扫描)。
我很惊讶“ice”的全文查询会找到“police”,这肯定是某个地方的错误。
您也可以考虑使用 Atlas 搜索而不是全文搜索,后者更强大但为 Atlas 专有。
推荐阅读
- scala - Spark 2.4 的 lineSep 选项
- python-3.x - 使用 TDOA 技术计算位置坐标
- javascript - {Better Discord Plugin} 用于电子邮件和 IP 记录代码 Js 和 Fetch
- dart - 如何使用 await 将非异步值包装在 Future 中?
- laravel - 托管公司将不允许 Office 365 SMTP 连接发送电子邮件。有哪些可能的解决方案?
- php - Php - 删除多个文件夹超过 7 天的文件
- c# - 带有 POCO 类的 mongodb graphLookup c# 示例
- r - 在R中每周计算平均绝对百分比误差的问题
- python - 如何过滤字符以在 Python 中比较字符串
- python - 如何暂停pytest计时器?