上面这个查询返回以下结果集:
因为match
查询需要查询两个关键词:"brown"
和"dog"
,在内部会执行两个term
查询并综合二者的结果得到最终的结果。match
的实现方式是将两个term
查询放入一个bool
查询,查询在之前的章节已经介绍过。
重要的一点是,'title'
字段包含至少一个查询关键字的文档都被认为是符合查询条件的。匹配的单词数越多,文档的相关度越高。
match
查询接受一个'operator'
参数,默认值为or
。如果要求所有查询关键字都匹配,可以更改参数值为and
:
这个查询会排除文档1,因为文档1只包含了一个查询关键词。
控制精度
在 all 和 any 之间的选择有点过于非黑即白。如果用户指定了5个查询关键字,而一个文档只包含了其中的4个?将设置为'and'
会排除这个文档。
match
查询有'minimum_should_match'
参数,参数值表示被视为相关的文档必须匹配的关键词个数。参数值可以设为整数,也可以设置为百分数。因为不能提前确定用户输入的查询关键词个数,使用百分数也很合理。
当'minimum_should_match'
被设置为百分数时,查询进行如下:在上面的例子里,'75%'
会被下舍为'66.6%'
,也就是2个关键词。不论参数值为多少,进入结果集的文档至少应匹配一个关键词。
[提示]
'minimum_should_match'
参数很灵活,根据用户输入的关键词个数,可以采用不同的匹配规则。更详细的内容可以查看。