我对弹性搜索很新。我需要使用MongoDB中的数据构建一个搜索系统。所以,这是我的应用程序的高级概述:
- 属于不同组织的不同用户
- 用户可以上传多个数据集。每个数据集都作为单个文档存储在MongoDB中。但是,每个数据集都包含一个节点数组,其中包含我们感兴趣的数据。
- 用户可以一次将一个数据集加载到他的工作区,并查看该特定数据集的整个数据。但是,一次只有一个用户可以查看一个数据集。因此,数据集彼此独立,我们永远不需要在多个数据集上进行任何聚合。
- 用户可以在他/她的工作区中加载的数据集中执行搜索。搜索应返回数据集
的节点数组中的匹配元素
为了说明,这里是MongoDB数据集集合中的单个文档
{
"_id": ObjectId()
"setName": "dummy_set",
"nodes": [
{
"id": ObjectId(),
"label": "some text",
"content" : "more text"
},
. . .
]
}
为此,我的设计是:
- 我的群集中将有一个索引
- 每个单个数据集将以索引中的单独类型存储。类型的名称将是mongoDB中数据集的ObjectId
- 数据集的节点数组中的每个元素将成为elasticsearch中相应类型的单个文档。
- 我将使用自定义路由来确保单个数据集仅驻留在一个分片上。为此,我将使用类型名称(来自MongoDB的数据集的ObjectId)作为我的路由键。我假设,我必须将每个文档存储在elasticsearch中吗?
现在我需要知道我是否朝着正确的方向前进?该解决方案是否具有可扩展性,或者设计中存在严重错误,并希望听到有关如何改进它的一些建议。