我需要在nestjs中使用ElasticSearch来查询从索引中检索一些结果。
要求:我需要所有结果,包括access_level:“受限”和access_level:“不受限制”的结果,但访问级别为:“受限”将不包括:搜索结果中的['image_path']字段。
然而,“Unrestricted”结果将在结果列表中保持不变,包括'image_path'字段如何进行ElasticSearch来实现它nestjs do with 1 query
bbody = {
from: (search_body.current_page - 1) * search_body.current_page_size,
size: search_body.current_page_size,
_source: {
excludes: ["image_path"] // when ip not authorise
},
sort: [{
_script: {
type: "number",
script: {
lang: "painless",
source: "doc.containsKey('image_path') && doc['image_path'].size() > 0 ? 0 : 1"
},
order: "asc"
}
},
"_score",
{
[final_sorting_field]: final_sorting_type
}
],
query: {
bool: {
must: [
// Add your other query conditions here
],
should: []
},
},
};
1条答案
按热度按时间bjg7j2ky1#
在elasticsearch方面,这是由名为field level security的特性处理的。这是高级功能。如果你想推出自己的安全解决方案,这在这里是相当困难的,你将不得不在elasticsearch之外实现它。一种可能的解决方案是将受限图像存储在另一字段中。这样,无论记录的状态如何,您都可以从源中删除此字段。如果
access_level
字段索引为关键字,则也可以在脚本中检查它,并仅在access_level不受限制时从脚本返回image_path
。请注意,与内置的字段级安全解决方案不同,它只会从输出的源中删除字段。所有其他操作(包括聚合等)仍将有权访问此字段。