我正在实现使用Elasticsearch的多租户系统。一个索引保存所有租户的文档。因为它对所有租户都有相同的字段。我有一个字段来识别这样的租户。
{
tenantId: "cba1714d-0062-4fc6-a11d-88e062b1fe88"
}
条件是该租户id中的用户应该能够索引租户id="的文档;cba1714d-0062-4fc6-a11d-88e062b1fe88〃;只有
是否有任何内置功能可以防止跨租户索引文档?
是的,您可以在弹性搜索中使用摄入管道来实现。Ingest管道具有丢弃处理器,该处理器将根据具体情况丢弃文档。
您可以使用以下命令或从Kibana创建Ingest管道。
PUT _ingest/pipeline/my-pipeline
{
"description": "My optional pipeline description",
"processors": [
{
"drop": {
"if": "ctx.tenantId != 'cba1714d-0062-4fc6-a11d-88e062b1fe88'"
}
}
]
}
创建管道后,您可以在索引请求中提供管道名称:
POST my-index/_doc?pipeline=my-pipeline
{
"@timestamp": "2099-03-07T11:04:05.000Z",
"tenantId": "cba1714d-0062-4fc6-a11d-88e062b1fe88"
}
如果您想在不同的索引中基于tenantId
对文档进行索引,则可以使用Set Processor并根据条件更改_index
的值。