最小匹配上下文
编辑最小匹配上下文
编辑使用 Painless 脚本指定指定字段需要匹配的最小术语数量,以使文档成为查询结果的一部分。
变量
-
params
(Map
,只读) - 作为查询一部分传入的用户定义参数。
-
params['num_terms']
(int
,只读) - 指定匹配的术语数量。
-
doc
(Map
,只读) - 包含当前文档的字段,其中每个字段都是值的
List
。
返回值
-
int
- 匹配当前文档所需的最小术语数。
API
标准的Painless API可用。
示例
要运行此示例,请首先按照上下文示例中的步骤操作。
假设您想查找您最喜欢的演员出演的演出的座位。您心中有一份最喜欢的演员列表,您想查找演员阵容至少包含其中一定数量演员的演出。
为了实现此结果,请使用带有minimum_should_match_script
的terms_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 } } } } } }