javascript 在检索搜索结果时,是否使用ElasticSearch将特定字段数据替换为空?

cxfofazt  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(89)

我需要在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: []
    },
  },
};
bjg7j2ky

bjg7j2ky1#

在elasticsearch方面,这是由名为field level security的特性处理的。这是高级功能。如果你想推出自己的安全解决方案,这在这里是相当困难的,你将不得不在elasticsearch之外实现它。一种可能的解决方案是将受限图像存储在另一字段中。这样,无论记录的状态如何,您都可以从源中删除此字段。如果access_level字段索引为关键字,则也可以在脚本中检查它,并仅在access_level不受限制时从脚本返回image_path。请注意,与内置的字段级安全解决方案不同,它只会从输出的源中删除字段。所有其他操作(包括聚合等)仍将有权访问此字段。

相关问题