当前位置: 首页 > news >正文

elasticsearch Query DSL(三)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

本文参考官方提供api提炼出来的

https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html

Compound Queries

复合查询包装其他复合或叶子查询,以组合其结果和分数,更改其行为,或从查询切换到筛选器上下文。

Constant Score Query

一个包装另一个查询的查询,只返回一个等于筛选器中每个文档的查询提升的常量分数。

GET /_search
{
    "query": {
        "constant_score" : {
            "filter" : {
                "term" : { "user" : "kimchy"}
            },
            "boost" : 1.2
        }
    }
}

Bool Query

用于组合多个叶或化合物查询子句,作为默认查询 mustshouldmust_not,或filter条款。在mustshould 条款有他们的分数相结合-更匹配的条款,更好的-而must_notfilter条款在过滤器上下文中执行。

发生描述

must

子句(查询)必须出现在匹配的文档中,并有助于得分。

filter

子句(查询)必须出现在匹配的文档中。但是不同于 must查询的分数将被忽略。过滤器子句在过滤器上下文中执行,这意味着忽略评分并考虑使用子句进行高速缓存。

should

子句(查询)应出现在匹配的文档中。如果 bool查询位于查询上下文中并且具有mustorfilter子句,则bool即使没有 should查询匹配,文档也将与查询匹配。在这种情况下,这些条款仅用于影响分数。如果bool查询是过滤器上下文, 或者既没有must或者filter至少有一个should查询必须与文档匹配,以便与bool查询匹配。可以通过设置minimum_should_match参数来显式控制此行为 。

must_not

子句(查询)不得出现在匹配的文档中。子句在过滤器上下文中执行,这意味着忽略评分并考虑使用子句进行高速缓存。由于忽略了评分,因此0会返回所有文档的分数。

GET _search
{
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      },
      "filter": {
        "term": {
          "status": "active"
        }
      }
    }
  }
}

等价

GET _search
{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "status": "active"
        }
      }
    }
  }
}

Dis Max Query

一个接受多个查询的查询,并返回与任何查询子句匹配的任何文档。当bool查询组合来自所有匹配查询的分数时,dis_max查询使用单个最佳匹配查询子句的分数。

GET /_search
{
    "query": {
        "dis_max" : {
            "tie_breaker" : 0.7,
            "boost" : 1.2,
            "queries" : [
                {
                    "term" : { "age" : 34 }
                },
                {
                    "term" : { "age" : 35 }
                }
            ]
        }
    }
}

Function Score Query

function_score允许你修改的由查询检索文档的分数。

要使用function_score,用户必须定义​​查询和一个或多个函数,这些函数计算查询返回的每个文档的新分数。

GET /_search
{
    "query": {
        "function_score": {
            "query": { "match_all": {} },
            "boost": "5",
            "random_score": {},
            "boost_mode":"multiply"
        }
    }
}
GET /_search
{
    "query": {
        "function_score": {
          "query": { "match_all": {} },
          "boost": "5",
          "functions": [
              {
                  "filter": { "match": { "test": "bar" } },
                  "random_score": {},
                  "weight": 23
              },
              {
                  "filter": { "match": { "test": "cat" } },
                  "weight": 42
              }
          ],
          "max_boost": 42,
          "score_mode": "max",
          "boost_mode": "multiply",
          "min_score" : 42
        }
    }
}

每个文档都由定义的函数评分。该参数 score_mode指定计算得分的组合方式:

multiply

分数乘以(默认)

sum

得分总和

avg

分数是平均的

first

应用具有匹配过滤器的第一个函数

max

使用最高分

min

使用最低分数

该参数boost_mode定义:

multiply

查询得分和功能得分相乘(默认)

replace

仅使用功能得分,忽略查询得分

sum

查询得分和功能得分被添加

avg

平均

max

最大查询分数和功能分数

min

最小查询得分和功能得分

script_score函数允许您使用脚本表达式包装另一个查询并使用从doc中其他数字字段值派生的计算来自定义它的评分。

GET /_search
{
    "query": {
        "function_score": {
            "query": {
                "match": { "message": "elasticsearch" }
            },
            "script_score" : {
                "script" : {
                  "source": "Math.log(2 + doc['likes'].value)"
                }
            }
        }
    }
}

 

field_value_factor功能允许您使用文档中的字段来影响分数。它与使用该script_score函数类似,但它避免了脚本的开销。如果在多值字段上使用,则仅在计算中使用该字段的第一个值。

GET /_search
{
    "query": {
        "function_score": {
            "field_value_factor": {
                "field": "likes",
                "factor": 1.2,
                "modifier": "sqrt",
                "missing": 1
            }
        }
    }
}

这将转化为以下评分公式:

sqrt(1.2 * doc['likes'].value)

该功能有多种选择field_value_factor

field

要从文档中提取的字段。

factor

将字段值乘以的可选因子,默认为1

modifier

修改适用于该字段的值,可以是一个:nonelog, log1plog2plnln1pln2psquaresqrt,或reciprocal。默认为none

 

修改含义

none

不要对字段值应用任何乘数

log

取字段值的常用对数

log1p

将1添加到字段值并采用常用对数

log2p

将2添加到字段值并采用常用对数

ln

取字段值的自然对数

ln1p

将1添加到字段值并采用自然对数

ln2p

将2添加到字段值并采用自然对数

square

平方字段值(乘以它自己)

sqrt

取字段值的平方根

reciprocal

报答字段值,同1/x那里x是该字段的值

missing

如果文档没有该字段,则使用的值。修饰符和因子仍然应用于它,就像从文档中读取一样。

Boosting Query

返回与positive查询匹配的文档,但减少与negative查询匹配的文档的分数。

GET /_search
{
    "query": {
        "boosting" : {
            "positive" : {
                "term" : {
                    "field1" : "value1"
                }
            },
            "negative" : {
                 "term" : {
                     "field2" : "value2"
                }
            },
            "negative_boost" : 0.2
        }
    }
}

Joining Queries

Nested Query

嵌套查询允许查询嵌套对象/文档

GET /_search
{
    "query": {
        "nested" : {
            "path" : "obj1",
            "score_mode" : "avg",
            "query" : {
                "bool" : {
                    "must" : [
                    { "match" : {"obj1.name" : "blue"} },
                    { "range" : {"obj1.count" : {"gt" : 5}} }
                    ]
                }
            }
        }
    }
}

Has Child Query

has_child过滤器接受查询和子类型针对其运行,并导致具有子文档与查询匹配的父文件。

GET /_search
{
    "query": {
        "has_child" : {
            "type" : "blog_tag",
            "query" : {
                "term" : {
                    "tag" : "something"
                }
            }
        }
    }
}

has_child也有得分支持。支持的得分模式minmaxsumavgnone。默认值为 noneand,产生与先前版本相同的行为。如果将得分模式设置为除了之外的其他值none,则将所有匹配的子文档的得分聚合到关联的父文档中。

GET /_search
{
    "query": {
        "has_child" : {
            "type" : "blog_tag",
            "score_mode" : "min",
            "query" : {
                "term" : {
                    "tag" : "something"
                }
            }
        }
    }
}

Has Parent Query

has_parent查询接受查询和父类型。查询在父文档空间中执行,该父文档空间由父类型指定。此查询返回关联父项已匹配的子文档。对于其余has_parent查询具有相同的选项,其工作方式与has_child查询相同。

GET /_search
{
    "query": {
        "has_parent" : {
            "parent_type" : "blog",
            "score" : true,
            "query" : {
                "term" : {
                    "tag" : "something"
                }
            }
        }
    }
}

Parent Id Query

parent_id查询可用于查找属于特定父级的子文档。

GET /my_index/_search
{
  "query": {
    "parent_id": {
      "type": "my_child",
      "id": "1"
    }
  }
}

此查询有两个必需参数:

type

类型名称,在指定的join领域。

id

父文档的ID。

ignore_unmapped

设置为truethis时将忽略未映射,type并且不匹配此查询的任何文档。在查询可能具有不同映射的多个索引时,这非常有用。设置为false(默认值)时,如果type未映射,查询将引发异常。

转载于:https://my.oschina.net/u/4008390/blog/2874674

相关文章:

  • 在 centos 上安装 Jenkins
  • 以太坊生态系统中的开发工具和技术
  • git命令——revert、reset
  • 如何高效的使用 Git
  • opencv模板匹配有趣的链接
  • 好看的字体—方正粗倩
  • PAT 1041 Be Unique[简单]
  • 创建Cloudhbase维表
  • 新项目流程--安装yii框架
  • 我写的Angular相关的文章
  • 给Python新人练手准备的两个简单案例
  • js中的 substr方法与substring方法 不同
  • 程序猿生存指南-13 再见老潘
  • 小程序获取unionId以及手机号
  • 一道小编程题(自用)
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 345-反转字符串中的元音字母
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • android图片蒙层
  • iOS | NSProxy
  • Javascript 原型链
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • vuex 学习笔记 01
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 当SetTimeout遇到了字符串
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何进阶一名有竞争力的程序员?
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一道闭包题引发的思考
  • 正则与JS中的正则
  • 智能合约Solidity教程-事件和日志(一)
  • No resource identifier found for attribute,RxJava之zip操作符
  • 白色的风信子
  • scrapy中间件源码分析及常用中间件大全
  • 阿里云服务器购买完整流程
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​水经微图Web1.5.0版即将上线
  • #14vue3生成表单并跳转到外部地址的方式
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (4.10~4.16)
  • (搬运以学习)flask 上下文的实现
  • (分布式缓存)Redis哨兵
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (四)Linux Shell编程——输入输出重定向
  • (转)JAVA中的堆栈
  • (转载)Google Chrome调试JS
  • . Flume面试题
  • .net framework4与其client profile版本的区别
  • .NET Micro Framework初体验(二)
  • .Net 应用中使用dot trace进行性能诊断
  • .NET关于 跳过SSL中遇到的问题
  • .Net组件程序设计之线程、并发管理(一)