前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch(七)——复合查询

Elasticsearch(七)——复合查询

作者头像
羊羽shine
发布2019-05-29 18:45:37
1.9K0
发布2019-05-29 18:45:37
举报
文章被收录于专栏:Golang开发Golang开发

constant_score

将查询内部的结果文档得分都设定为1或者boost的值,多用于结合bool查询实现自定义得分

代码语言:javascript
复制
GET blog/paper/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "uID": "1"
        }
      }
    }
  }
}

bool 布尔查询有一个或者多个布尔子句组成

filter

只过滤符合条件的文档,不计算相关系得分

must

文档必须符合must中所有的条件,会影响相关性得分

must_not

文档必须不符合must_not 中的所有条件

should

文档可以符合should中的条件

filter查询只过滤符合条件的文档,es会有只能缓存,因此其执行效率很高,做简单的匹配查询且不考虑算分是,推荐使用filter替代query

上下文类型

执行类型

使用方式

Query

查找和查询语句最匹配的文档,对所有文档进行相关性算分排序

query查询 bool中的must和should

Filter

查找和查询语句匹配的文档

bool中的filter和must_not或者constant_score中的filter

should 使用分两种情况 bool查询包含should,不包含must查询,只包含should,文档必须满足至少一个条件,minimum_should_match可以满足条件的个数或者百分比。 bool查询同时包含should和must查询,文档不必满足should中的条件,但是如果满足条件,会增加相关性得分。 dis_max query function_score query boosting query

filter执行原理深度剖析

1.在倒排索引中查找搜索串,获取document list。 2.为每个在倒排索引中搜索到的结果,构建一个bitset,[0, 0, 0, 1, 0, 1] 3.遍历每个过滤条件对应的bitset,优先从最稀疏的开始搜索,查找满足所有条件的document 4.caching bitset,跟踪query,在最近256个query中超过一定次数的过滤条件,缓存其bitset。对于小segment(<1000,或<3%),不缓存bitset。 5.filter大部分情况下来说,在query之前执行,先尽量过滤掉尽可能多的数据 6.如果document有新增或修改,那么cached bitset会被自动更新 7.以后只要是有相同的filter条件的,会直接来使用这个过滤条件对应的cached bitset

布尔查询是一种最常用的组合查询方式,布尔查询把多个子查询组合(combine)成一个布尔表达式,所有子查询之间的逻辑关系是与(and);只有当一个文档满足布尔查询中的所有子查询条件时,ElasticSearch引擎才认为该文档满足查询条件。布尔查询支持的子查询类型共有四种,分别是:must,should,must_not和filter:

查询字句

说明

类型

must

文档必须匹配must查询条件

数组

should

文档应该匹配should子句查询的一个或多个

数组

must_not

文档不能匹配该查询条件

数组

filter

过滤器,文档必须匹配该过滤条件,跟must子句的唯一区别是,filter不影响查询的score

字典

代码语言:javascript
复制
select * from paper where (date="2018-10-11" or uID= 1) and pID!="7ec0e0e5-a4b0-46d7-af56-5b3eab477aea"
代码语言:javascript
复制
GET blog/paper/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {"date":"2018-10-11"}},
        {"term": {"uID":1}}
      ]
      , "must_not": [
        {"term": {"pID": "7ec0e0e5-a4b0-46d7-af56-5b3eab477aea"}}
      ]
    }
  }
}
代码语言:javascript
复制
select *from paper where date= "2018-10-11" or(uid=1 and publish= 1)
代码语言:javascript
复制
GET blog/paper/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {"date": "2018-10-11"}},
        {"bool": {
          "must": [
            {"term": {"uID": "1"}},
            {"term": {"publish": true}}
          ]
        }}
      ]
    }
  }
}

搜索java,elasticsearch,hadoop,spark关键字需要至少匹配2个

代码语言:javascript
复制
GET blog/paper/_search
{
  "query": {
    "bool": {
      "should": [
        {"match": {
          "title": "java"
        }},
         {"match": {
          "title": "elasticsearch"
        }},
         {"match": {
          "title": "hadoop"
        }},
         {"match": {
          "title": "spark"
        }}
      ]
      , "minimum_should_match": 2
    }
  }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • constant_score
  • filter执行原理深度剖析
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档