大数据利器Elasticsearch之bool查询和boosting查询

这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战java

本Elasticsearch相关文章的版本为:7.4.2python

bool查询

Elasticsearch的bool查询是使用一个或多个bool查询子句构建的,每一个子句都是如下特定bool类型:c++

bool类型 描述 是否参与评分
must must里面的全部子句都知足的文档才返回
should 应该知足should里面的0个或多个子句的文档才返回
must_not must_not里面的子句不能出如今文档里
filter 必须知足filter子句的文档才返回

bool查询遵循more-matches-is-better的原则。意味着知足must和should子句查询的分数将会汇总到一块儿做为最后的_scorre评分。filter和must_not的子句不归入到评分范围,仅进行过滤文档 下面的查询语句就是查找获取知足如下条件的候选人:golang

  1. tag里面必须是有algorithm的;
  2. tag里面必须是有it行业经验的;
  3. 年龄不能大于36或者小于18岁;
  4. 至少熟悉如下编程语言中一种, 熟悉的语言越多越好:Python、Golang、C++或Java
POST /candidate/_search
{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "tag" : "algorithm" }
      },
      "filter": {
        "term" : { "tag" : "it" }
      },
      "must_not" : {
        "range" : {
          "age" : { "gte" : 36, "lte" : 18 }
        }
      },
      "should" : [
        { "term" : { "tag" : "python" } },
        { "term" : { "tag" : "golang" } },
        { "term" : { "tag" : "c++" } },
        { "term" : { "tag" : "java" } }
      ],
      "minimum_should_match" : 1,
      "boost" : 1.0
    }
  }
}
复制代码

boosting查询

boosting查询返回知足positive子句的文档,而且同时下降知足negative子句的文档的相关性得分。这样,咱们能够使用boosting查询将某些文档相关性下降而不将它们从搜索结果中排除。
下面的查询语句将会获得如下文档:编程

  1. 返回全部爱好里面喜欢苹果的文档;
  2. 下降喜欢苹果的同时喜欢薯片的文档的相关性得分。
GET /bank/_search
{
    "query": {
        "boosting" : {
            "positive" : {
                "term" : {
                    "hobby" : "apple"
                }
            },
            "negative" : {
                 "term" : {
                     "hobby" : "chips"
                }
            },
            "negative_boost" : 0.5
        }
    }
}
复制代码

boosting查询适合挑选最重要的但容许存在某些不过重要的条件的文档。markdown

相关文章
相关标签/搜索