最小匹配上下文编辑

使用无痛脚本指定最小术语数量,该数量是指定字段需要匹配的,以便文档成为查询结果的一部分。

变量

params (Map,只读)
作为查询的一部分传入的用户定义参数。
params['num_terms'] (int,只读)
指定匹配的术语数量。
doc (Map,只读)
包含当前文档的字段,其中每个字段都是一个 List 值。

返回值

int
匹配当前文档所需的最小术语数量。

API

标准的无痛 API 可用。

示例

要运行此示例,请先按照上下文示例中的步骤操作。

假设您想找到您最喜欢的演员出演的表演的座位。您心中有一份最喜欢的演员名单,您想找到演员阵容中至少包含一定数量您最喜欢的演员的表演。

要实现此结果,请使用带有 minimum_should_match_scriptterms_set 查询。为了使查询请求更具可配置性,您可以将 min_actors_to_see 定义为脚本参数。

为了确保参数 min_actors_to_see 不超过您最喜欢的演员数量,您可以使用 num_terms 获取演员列表中的演员数量,并使用 Math.min 获取两者中较小的一个。

Math.min(params['num_terms'], params['min_actors_to_see'])

以下请求查找至少包含三个指定演员中的两个的表演的座位。

GET seats/_search
{
  "query": {
    "terms_set": {
      "actors": {
        "terms": [
          "smith",
          "earns",
          "black"
        ],
        "minimum_should_match_script": {
          "source": "Math.min(params['num_terms'], params['min_actors_to_see'])",
          "params": {
            "min_actors_to_see": 2
          }
        }
      }
    }
  }
}