我花了几个小时阅读文档和论坛,试图找到解决以下问题的方法:
在Mongo数据库中,我有一个包含一些非结构化数据的集合:
{“data”:“some data”,“_ id”:“497ce96f395f2f052a494fd4”}
{“more_data”:“此处有更多数据”,“recursive_data”:{“some_data”:“此处更多数据”,“_ id”:“497ce96f395f2f052a4323”}
{“more_unknown_data”:“string or even dictionaries”,“_ id”:“497ce96f395f2f052a494fsd2”}
...
问题是这个集合中的元素没有预定义的结构,它们可以是无限级别。
我的目标是创建一个查询,搜索集合并查找与正则表达式匹配的所有元素(在键和值中)。
例如,如果我有一个正则表达式:'^甚至更多' - 它应该返回结构中某处具有“甚至更多”字符串的所有元素。在这种情况下 - 这将是第二个。
答案 0 :(得分:4)
只需向每个对象添加一个数组,并使用您希望能够搜索的字符串填充它。通常我会将这些值小写,以便使不区分大小写的搜索变得容易。
e.g。标签:[“字符串1的副本”,“字符串2的副本”,...]
您可以扩展此技术以索引每个元素的每个单词。有时我也会在其前面添加一个标识符,例如“genre:rock”允许搜索特定字段中的值(仔细选择':'字符)。
在此阵列上添加索引,现在您可以搜索集合中任何文档中的任何单词或短语,并且可以搜索“genre:rock”以在特定字段中搜索该值。
答案 1 :(得分:0)
如果你能找到办法做到这一点,你仍会面临搜索速度慢的问题,因为没有索引
我有类似的问题,解决方案是创建额外的数据库(在相同的引擎或任何其他更适合搜索的引擎上)并用mongo键填充它并组合成一个文本字段数据。并在mongodb数据更新时更新它。
如果它合适,你也可以尝试这种方式......至少搜索工作非常快。 (我使用postgresql作为搜索后端)