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必须不匹配
post nba/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "james"
}
}
],
"must_not": [
{
"term": {
"teamConferenceEn": {
"value": "Eastern"
}
}
}
]
}
}
}
# should 应该,应该是11-20年,但是其他的也会查询出来
post nba/_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中的一个条件,应该变成必须一个条件成立
post nba/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "james"
}
}
],
"must_not": [
{
"term": {
"teamConferenceEn": {
"value": "Eastern"
}
}
}
],
"should": [
{
"range": {
"year": {
"gte": 2011,
"lte": 2020
}
}
}
],
"minimum_should_match": 1
}
}
}