在Elasticsearch中实施基于限制的查询

我正在尝试在ElasticSearch(嵌套)中实现查询,在该查询中,仅返回满足某些限制的文档。每个文档将具有一个字符串数组(Restrictions),并且还将向查询提供一个字符串数组(我们称之为“ satisfiedRestrictions”),目标是仅检索(过滤)仅具有指定限制的那些文档在“ satisfiedRestrictions”中

让我说我有文件

std::future

鉴于[ { "Id":1,"Restrictions":["restriction1","restriction2"] },{ "Id":2,"Restrictions":["restriction1"] },{ "Id":3,"restriction2","restriction3"] } ] ,查询应返回ID为1和2的文档。文档3具有satisfiedRestrictions = ["restriction1","restriction2"]参数中未指定的额外限制(“ restriction3”),因此应从结果中排除该限制。

可以通过satisfiedRestrictions子句解决此问题(必须不匹配“ restiction3”),但是这将假定所有可能的限制值都应保存在某个地方。理想的解决方案是不必这样做。

是否有很好的方法来实现这一目标,或者这种基于限制的模型无法解决?

jackychen101211 回答:在Elasticsearch中实施基于限制的查询

如果数组中有不同的值,这应该可以工作:

{
  "query": {
    "bool" : {
      "must" : {
        "terms" : { "Restrictions" : ["restriction1","restriction2"] }
      },"must" : {
        "script" : {
          "script" : {
            "inline" : "doc[\"Restrictions\"].length < 3",}
        }
      }
    }
  }
}

编辑:== 2替换为

本文链接:https://www.f2er.com/3161290.html

大家都在问