我需要在nestjs中使用弹性搜索来查询以从索引中检索一些结果。
要求:我需要所有结果,包括 access_level: "Restricted" 和 access_level: "Unrestricted" 结果,但 access_level: "Restricted" 的数据将排除:搜索结果中的 ['image_path'] 字段。
但是,结果列表中的“不受限制”结果将保持不变,包括“image_path”字段如何进行弹性搜索以使用 Nestjs 执行 1 个查询
body = {
from: 0,
size: 0,
_source: {
excludes: ["image_path"] // when access_level: Restricted
},
query: {
bool: {
must:[
{
match: {
access_level: "Restricted"
},
match: {
access_level: "Unrestricted"
}
}
],
should: []
},
},
};
在 Elasticsearch 方面,这是通过称为“字段级安全性”的功能来处理的。这是高级功能。如果您想推出自己的安全解决方案(这在这里相当困难),您必须在 Elasticsearch 之外实现它。一种可能的解决方案是将受限图像存储在另一个字段中。这样,无论记录的状态如何,您都可以从源中删除该字段。如果 access_level
字段索引为关键字,您还可以在脚本中检查它,并仅当 access_level 不受限制时才从脚本返回
image_path
。请注意,与内置字段级安全解决方案不同,内置字段级安全解决方案只会从输出的源中删除字段。所有其他操作(包括聚合等)仍然可以访问该字段。