如何搜索结构未知的Collection?

时间:2011-11-20 23:59:33

标签: mongodb nosql

我花了几个小时阅读文档和论坛,试图找到解决以下问题的方法:

在Mongo数据库中,我有一个包含一些非结构化数据的集合:

  

{“data”:“some data”,“_ id”:“497ce96f395f2f052a494fd4”}

     

{“more_data”:“此处有更多数据”,“recursive_data”:{“some_data”:“此处更多数据”,“_ id”:“497ce96f395f2f052a4323”}

     

{“more_unknown_data”:“string or even dictionaries”,“_ id”:“497ce96f395f2f052a494fsd2”}

     

...

问题是这个集合中的元素没有预定义的结构,它们可以是无限级别。

我的目标是创建一个查询,搜索集合并查找与正则表达式匹配的所有元素(在键和值中)。

例如,如果我有一个正则表达式:'^甚至更多' - 它应该返回结构中某处具有“甚至更多”字符串的所有元素。在这种情况下 - 这将是第二个。

2 个答案:

答案 0 :(得分:4)

只需向每个对象添加一个数组,并使用您希望能够搜索的字符串填充它。通常我会将这些值小写,以便使不区分大小写的搜索变得容易。

e.g。标签:[“字符串1的副本”,“字符串2的副本”,...]

您可以扩展此技术以索引每个元素的每个单词。有时我也会在其前面添加一个标识符,例如“genre:rock”允许搜索特定字段中的值(仔细选择':'字符)。

在此阵列上添加索引,现在您可以搜索集合中任何文档中的任何单词或短语,并且可以搜索“genre:rock”以在特定字段中搜索该值。

答案 1 :(得分:0)

如果你能找到办法做到这一点,你仍会面临搜索速度慢的问题,因为没有索引

我有类似的问题,解决方案是创建额外的数据库(在相同的引擎或任何其他更适合搜索的引擎上)并用mongo键填充它并组合成一个文本字段数据。并在mongodb数据更新时更新它。

如果它合适,你也可以尝试这种方式......至少搜索工作非常快。 (我使用postgresql作为搜索后端)