最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Elasticsearch查詢及聚合類DSL語句寶典示例詳解

 更新時間:2023年01月03日 14:27:04   作者:京東云開發(fā)者  
這篇文章主要為大家介紹了Elasticsearch查詢及聚合類DSL語句寶典示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

隨著使用es場景的增多,工作當(dāng)中避免不了去使用es進行數(shù)據(jù)的存儲,在數(shù)據(jù)存儲到es當(dāng)中以后就需要使用DSL語句進行數(shù)據(jù)的查詢、聚合等操作,DSL對SE的意義就像SQL對MySQL一樣,學(xué)會如何編寫查詢語句決定了后期是否能完全駕馭ES,所以至關(guān)重要,本專題主要是分享常用的DSL語句,拿來即用。

一、match

如果match 查詢數(shù)字,日期,布爾值或者not_analyzed 的字符串時,會精確匹配搜索值,不做分詞解析;如果match 查詢?nèi)谋?,會對查詢詞做分詞解析,然后搜索。

比如對keyword 類型的tag 查詢,"京東總部"不會分詞,必須完全相等的詞才會被搜索出來

{
  "query": {
    "match": {
        "content" : {
            "tag" : "京東總部"
        }
    }
  }
}

比如"寶馬多少馬力"會被分詞為"寶馬 多少 馬力", 所有有關(guān)"寶馬 多少 馬力", 那么所有包含這三個詞中的一個或多個的文檔就會被搜索出來。并且根據(jù)lucene的評分機制(TF/IDF)來進行評分

{
  "query": {
    "match": {
        "content" : {
            "query" : "寶馬多少馬力"
        }
    }
  }
}

二、match_phrase

如果想要精確匹配所有同時包含"寶馬 多少 馬力"的文檔,就要使用 match_phrase 了

{
  "query": {
    "match_phrase": {
        "content" : {
            "query" : "寶馬多少馬力"
        }
    }
  }
}

三、mult_match

如果我們希望兩個字段進行匹配,其中一個字段有這個文檔就滿足的話,使用multi_match

{
  "query": {
    "multi_match": {
        "query" : "我的寶馬多少馬力",
        "fields" : ["title", "content"]
    }
  }
}

四、term

關(guān)鍵字精確匹配,不分詞解析。注意 term 包含(contains) 操作,而非 等值(equals)判斷。如果文檔包含full_text 及其他詞,也會命中返回。

使用term要確定的是這個字段是否“被分析”(analyzed),默認的字符串是被分析的。

比如下面的例子,其中的full_text是被分析過的,所以full_text的索引中存的就是[quick, foxes],而extra_value中存的是[Quick Foxes!]

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "full_text": {
          "type":  "string"
        },
        "exact_value": {
          "type":  "string",
          "index": "not_analyzed"
        }
      }
    }
  }
}
PUT my_index/my_type/1
{
  "full_text":   "Quick Foxes!",
  "exact_value": "Quick Foxes!"  
}

請求不出數(shù)據(jù)的,因為full_text分詞后的結(jié)果中沒有[Quick Foxes!]這個分詞

GET my_index/my_type/_search
{
  "query": {
    "term": {
      "full_text": "Quick Foxes!"
    }
  }
}

五、terms

指定多值精確匹配,如果字段包含了指定值中的任何一個值,那么文檔滿足條件。類似sql中的in

{
    "terms": {
        "tag": [
            "search",
            "full_text",
            "nosql"
        ]
    }
}

六、range

數(shù)字/時間的區(qū)間查詢,操作符:

gt > greater than

gte >=

lt < litter than

lte <=

{
  "query":{
    "range": {
        "age": {
            "gte":  20,
            "lt":   30
        }
    }
  }
}

七、wildcard

通配符索引。* 表示全匹配,? 表示單一匹配。掃描所有倒排索引,性能較差

{ 
  "query": { 
    "wildcard": { 
      "companyName": "*京東*" 
    } 
  } 
}

八、regexp

正則索引。掃描所有倒排索引,性能較差

{ 
    "query": { 
        "regexp": { 
            "postcode": "W[0-9].+" 
        } 
    } 
}

九、組合多查詢(bool查詢)

bool 查詢后面可以跟這四種匹配模式

•must 必須匹配

•must_not 必須不匹配

•should 匹配任意,等價or

•filter 必須匹配:過濾模式

比如我們想要請求"content 中帶寶馬,但是tag 中不帶寶馬"這樣類似的需求,就需要用到bool 聯(lián)合查詢。

{
    "query":{
        "bool":{
            "must":{
                "term":{
                    "content":"寶馬"
                }
            },
            "must_not":{
                "term":{
                    "tags":"寶馬"
                }
            }
        }
    }
}

十、聚合

聚合包含一下兩種:

1、 指標(biāo)聚合(Metric Aggregation):一些數(shù)學(xué)運算,可以對文檔字段進行統(tǒng)計分析

•輸出一個值

?min

?max

?sum

?avg

? value_count 統(tǒng)計某字段有值的文檔數(shù)

? cardinality 某字段值去重計數(shù)

•輸出多個值

?stats

?percentiles

?percentile_ranks

2、桶聚合(Bucket Aggregation) :一些列滿足特定條件的文檔的集合,相當(dāng)于sql 的groupby

•terms 對某個字段統(tǒng)計每個不同的內(nèi)容,以及出現(xiàn)文檔的個數(shù)

•range 某個范圍內(nèi)文檔的個數(shù)

默認聚合范圍是全文,但是如果有query查詢,那么聚合的范圍就是query查詢的結(jié)果。

value_count 統(tǒng)計某字段有值的文檔數(shù)

{
  "size": 0, 
  "aggs": {
    "count": {
      "value_count": {
        "field": "companyName"
      }
    }
  }
}

指定查詢語句進行統(tǒng)計

{
  "query": {
    "term": {
      "companyName": "安徽科達智慧能源科技有限公司"
    }
  },
  "aggs": {
    "count": {   //自定義名稱
      "terms": {
        "field": "companyName"
      }
    }
  }
}

以上就是本期分享的DSL語句,小伙伴們結(jié)合自己的使用查詢場景進行操練起來吧。

以上就是Elasticsearch查詢及聚合類DSL語句寶典示例詳解的詳細內(nèi)容,更多關(guān)于Elasticsearch查詢聚合類DSL的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java裝飾者模式的深入了解

    Java裝飾者模式的深入了解

    這篇文章主要為大家介紹了Java裝飾者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java動態(tài)代理機制詳解_動力節(jié)點Java學(xué)院整理

    Java動態(tài)代理機制詳解_動力節(jié)點Java學(xué)院整理

    這篇文章主要為大家詳細介紹了Java動態(tài)代理機制,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java中枚舉類型的一種使用方式

    Java中枚舉類型的一種使用方式

    這篇文章主要介紹了Java中枚舉類型的一種使用方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java程序的初始化順序,static{}靜態(tài)代碼塊和實例語句塊的使用方式

    Java程序的初始化順序,static{}靜態(tài)代碼塊和實例語句塊的使用方式

    這篇文章主要介紹了Java程序的初始化順序,static{}靜態(tài)代碼塊和實例語句塊的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 快速了解JAVA垃圾回收機制

    快速了解JAVA垃圾回收機制

    這篇文章主要介紹了有關(guān)Java垃圾回收機制的知識,文中實例簡單易懂,方便大家更好的學(xué)習(xí),有興趣的朋友可以了解下
    2020-06-06
  • Java解析微信獲取手機號信息的示例步驟

    Java解析微信獲取手機號信息的示例步驟

    在微信中,用戶手機號的獲取通常是通過微信小程序的getPhoneNumber接口來實現(xiàn)的,下面通過一個基于Java的示例,展示了如何接收并解密從微信小程序傳遞過來的加密手機號信息,感興趣的朋友一起看看吧
    2024-06-06
  • spring boot 集成 swagger3及配置方法

    spring boot 集成 swagger3及配置方法

    Swagger 3是一種開源的API描述工具,它可以幫助開發(fā)人員設(shè)計、構(gòu)建、文檔化和測試API,這篇文章主要介紹了spring boot 集成 swagger3,需要的朋友可以參考下
    2023-05-05
  • 詳解Java多線程和IO流的應(yīng)用

    詳解Java多線程和IO流的應(yīng)用

    這篇文章主要介紹了詳解Java多線程和IO流的應(yīng)用,無論是本地文件復(fù)制,還是網(wǎng)絡(luò)多線程下載,對于流的使用都是一樣的,需要的朋友可以參考下
    2023-04-04
  • SpringBoot整合EasyExcel實現(xiàn)導(dǎo)入導(dǎo)出功能

    SpringBoot整合EasyExcel實現(xiàn)導(dǎo)入導(dǎo)出功能

    EasyExcel是一個基于Java的、快速、簡潔、解決大文件內(nèi)存溢出的Excel處理工具,他能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成Excel的讀、寫等功能,本文就給大家介紹一下SpringBoot整合EasyExcel實現(xiàn)導(dǎo)入導(dǎo)出功能的方法,需要的朋友可以參考下
    2023-09-09
  • java多態(tài)性中的Overload和Override區(qū)別詳解

    java多態(tài)性中的Overload和Override區(qū)別詳解

    這篇文章主要介紹了java多態(tài)性中的Overload和Override區(qū)別詳解,重寫(Overriding)是父類與子類之間多態(tài)性的一種表現(xiàn),而重載(Overloading)是一個類中多態(tài)性的一種表現(xiàn),需要的朋友可以參考下
    2023-07-07

最新評論

鄂尔多斯市| 伽师县| 右玉县| 长兴县| 定西市| 义乌市| 尚义县| 宜都市| 颍上县| 巴林左旗| 阿鲁科尔沁旗| 尚志市| 溆浦县| 融水| 井研县| 邵阳市| 芷江| 剑阁县| 巴东县| 永善县| 鲁甸县| 乌拉特后旗| 广汉市| 阜新市| 彭水| 邢台县| 驻马店市| 平乡县| 米脂县| 静乐县| 甘孜| 平南县| 潞西市| 东城区| 西青区| 山丹县| 临邑县| 塔河县| 忻城县| 慈利县| 临邑县|