bool查询采用了“匹配越多越好”的方法,因此来自每个匹配的must或should子句的分数将添加在一起,以提供每个文档的最终_分数。
bool查询主要包括以下几种类型
must:查询的结果必须出现在匹配文档中,并且会计算得分
filter:查询的结果必须出现在匹配文档中,但是会忽略计算得分
should:查询的结果应该出现在匹配文档中,会计算相关性得分
must_not:查询的结果不应该出现在匹配的文档中,评分会被忽略
range:条件范围查询
gt:大于 相当于数据库中的>
gte:大于等于 相当于数据库中的>=
lt:小于 相当于数据库中的<
lte:小于等于,相当于数据库中的<=
如果不需要计算得分,可以使用filter替代must,以提高检索效率的目的。
# must必须匹配,会进行相关性打分POST/nba/_search{ "query": { "bool": { "must": [ { "match": { "title": "james" } } ] } } } # filter必须匹配,不会进行相关性打分POST/nba/_search{ "query": { "bool": { "filter": [ { "match": { "title": "james" } } ] } } } # must_not必须不匹配postnba/_search{ "query": { "bool": { "must": [ { "match": { "title": "james" } } ], "must_not": [ { "term": { "teamConferenceEn": { "value": "Eastern" } } } ] } } } # should 应该,应该是11-20年,但是其他的也会查询出来postnba/_search{ "query": { "bool": { "must": [ { "match": { "title": "james" } } ], "must_not": [ { "term": { "teamConferenceEn": { "value": "Eastern" } } } ], "should": [ { "range": { "year": { "gte": 2011, "lte": 2020 } } } ] } } } # should 应该,应该是11-20年,配合minimum_should_match=1,则至少匹配should中的一个条件,应该变成必须一个条件成立postnba/_search{ "query": { "bool": { "must": [ { "match": { "title": "james" } } ], "must_not": [ { "term": { "teamConferenceEn": { "value": "Eastern" } } } ], "should": [ { "range": { "year": { "gte": 2011, "lte": 2020 } } } ], "minimum_should_match": 1 } } }