Elasticsearch 是否有内置函数来防止在指定条件下索引文档?
Is there any built-in function from Elasticsearch to prevent indexing document on specified condition?
我正在实施使用 Elasticsearch 的多租户系统。
单个索引保存所有租户文档。因为它对所有租户都有相同的字段。
我有一个字段可以像这样识别租户。
{
tenantId: "cba1714d-0062-4fc6-a11d-88e062b1fe88"
}
条件是此租户 ID 中的用户只能索引租户 ID == "cba1714d-0062-4fc6-a11d-88e062b1fe88" 的文档。
是否有内置功能防止跨租户索引文档?
是的,您可以使用 ingest pipeline in elasticsearch. Ingest pipeline have drop processor 实现,它将根据特定条件删除文档。
您可以使用以下命令或从 Kibana 创建摄取管道。
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
的值。
我正在实施使用 Elasticsearch 的多租户系统。 单个索引保存所有租户文档。因为它对所有租户都有相同的字段。 我有一个字段可以像这样识别租户。
{
tenantId: "cba1714d-0062-4fc6-a11d-88e062b1fe88"
}
条件是此租户 ID 中的用户只能索引租户 ID == "cba1714d-0062-4fc6-a11d-88e062b1fe88" 的文档。
是否有内置功能防止跨租户索引文档?
是的,您可以使用 ingest pipeline in elasticsearch. Ingest pipeline have drop processor 实现,它将根据特定条件删除文档。
您可以使用以下命令或从 Kibana 创建摄取管道。
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
的值。