我正在遵循ES教程,有时在过滤器中使用term
编写了一个查询,而不是使用match
的推荐解决方案。我的理解是,在查询部分使用match
进行评分,而在term
部分使用filter
只是在进入查询部分之前删除匹配。令我惊讶的是,match
在filter
部分中也起作用。
两者之间有什么区别
GET blogs/_search
{
"query": {
"bool": {
"filter": {
"match": {
"category.keyword": "News"
}
}
}
}
}
和:
GET blogs/_search
{
"query": {
"bool": {
"filter": {
"term": {
"category.keyword": "News"
}
}
}
}
}
两者均返回相同的匹配,所有匹配的得分均为0。
filter子句的行为或match
是什么?我希望它能产生一些得分,但不会。
我的想法:
-
term
:不分析参数或字段,这是yes/no
方案。 -
match
:分析参数和字段,并计算出它们的匹配程度得分。
但是当在查询的match
部分中对keyword
使用filter
时,它的表现如何?