【发布时间】:2018-04-02 16:14:39
【问题描述】:
我正在为 Web 应用程序构建过滤功能,它应该看起来像 TFS 过滤查询的 JIRA。因此用户应该能够过滤字段内容并在过滤查询中使用逻辑运算符。
数据存在于 MongoDB 中,主要挑战是我们将过滤的字段不仅应支持严格相等,而且还应支持全文搜索,因为它们可能因每个用户而异。
简而言之,有一个嵌套对象,其中有另外三个嵌套对象,根据用户可以有不同数量的字段,字段名称也是由用户设置的,所以我们不知道。
例如集合中的文档结构可以是:
{
_id: ObjectId()
storage: {
obj_1:{}
obj_2:{}
}
},
{
_id: ObjectId()
storage: {
obj_1:{
field_1 : val,
field_2 : val
}
obj_2:{}
}
}
我想查询会是这样的:
find({$and:[{"storage.obj_1.field_1":{$regex: "va"}},{"storage.obj_1.var_2":"val"}]})
很遗憾,我不是数据库专家,所以我现在看到的解决方案是:
1) 使用 Elasticsearch 作为搜索引擎。 但问题是:如果我不知道我的文档结构,如何设置 Elastic 索引?
2) 在 Mongo 中使用稀疏索引。但我需要使用正则表达式进行匹配,该解决方案是否比 Elastic 更好?
所以问题是:在这种数据库结构中进行过滤的最佳方法是什么?
附言 我把这个问题放在 SO 而不是软件工程中,因为 SO 有更多的活跃成员,请保留你的反对意见以备后用
【问题讨论】:
标签: mongodb elasticsearch