国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【DSL】ES+DSL 查詢語法

這篇具有很好參考價(jià)值的文章主要介紹了【DSL】ES+DSL 查詢語法。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、前言

工作中遇到ES的查詢問題,由于業(yè)務(wù)方給的條件不清晰,有些查詢無法實(shí)現(xiàn),需要用到DSL語法查詢實(shí)現(xiàn),很久沒用生疏了,借此機(jī)會復(fù)習(xí)下。

二、定義

1.基本介紹

Elasticsearch(簡稱為ES),一個(gè)開源的分布式搜索和分析引擎,主要用于處理大量數(shù)據(jù)并提供快速、實(shí)時(shí)的搜索功能。
DSL(Domain Specific Language),一種特定領(lǐng)域的查詢語言,用于構(gòu)建復(fù)雜的查詢和聚合操作。

在Elasticsearch中,可用DSL語法來定義查詢和過濾條件,以及執(zhí)行聚合操作。
DSL語法具有JSON格式****(敲重點(diǎn),要考),因此它非常易于閱讀和編寫。

2.語法說明
(1)關(guān)鍵字(Keywords)
  • DSL通常會定義一組關(guān)鍵字,這些關(guān)鍵字具有特殊含義,并在DSL中起到關(guān)鍵作用。關(guān)鍵字通常不能用作標(biāo)識符或變量名。
  • 示例:在一個(gè)簡單的數(shù)學(xué)表達(dá)式DSL中,可能會定義關(guān)鍵字如"add"、"subtract"等來表示加法和減法操作。
(2)標(biāo)識符(Identifiers)
  • 標(biāo)識符是用來表示變量名、函數(shù)名或其他用戶定義的名稱。它們需要遵循特定的命名規(guī)則,如大小寫敏感、不包含特殊字符等。
  • 示例:在一個(gè)配置文件DSL中,可以使用標(biāo)識符來表示不同的配置項(xiàng),如"username"、"password"等。
(3)表達(dá)式(Expressions)
  • 表達(dá)式是DSL中最基本的構(gòu)建塊,用于計(jì)算或產(chǎn)生某個(gè)值。表達(dá)式可以包括變量、常量、運(yùn)算符和函數(shù)調(diào)用。
  • 示例:在一個(gè)數(shù)學(xué)表達(dá)式DSL中,可以將"2 + 3"作為一個(gè)表達(dá)式,計(jì)算結(jié)果為5。
(4)運(yùn)算符(Operators)
  • 運(yùn)算符用于執(zhí)行各種操作,例如算術(shù)運(yùn)算、邏輯運(yùn)算、比較運(yùn)算等。DSL中的運(yùn)算符根據(jù)所涉及的領(lǐng)域和需求而定。
  • 示例:在一個(gè)布爾表達(dá)式DSL中,可以定義邏輯運(yùn)算符如"and"、"or"用于連接多個(gè)條件。
(5)函數(shù)調(diào)用(Function Calls)
  • DSL可以支持函數(shù)調(diào)用,允許用戶使用預(yù)定義或自定義的函數(shù)來完成特定的任務(wù)。函數(shù)調(diào)用通常由函數(shù)名稱和傳遞給函數(shù)的參數(shù)組成。
  • 示例:在一個(gè)日期處理DSL中,可以定義函數(shù)"formatDate(date, format)",其中"date"是日期值,"format"是日期格式字符串。
(6)控制流(Control Flow)
  • 控制流語句用于控制程序的執(zhí)行流程,例如條件語句(if-else)和循環(huán)語句(while、for)等。DSL可以支持特定的控制流語句來滿足領(lǐng)域特定需求。
  • 示例:在一個(gè)工作流程DSL中,可以使用條件語句來判斷某個(gè)條件是否滿足并執(zhí)行相應(yīng)的操作。
(7)注釋(Comments)
  • 注釋用于向DSL代碼添加說明性文本,以便開發(fā)人員理解和維護(hù)代碼。注釋通常不會被編譯或執(zhí)行,僅用于閱讀目的。
  • 示例:在DSL中,可以使用雙斜杠(//)或特定的注釋標(biāo)記來添加注釋,如:“// 這是一個(gè)示例注釋”。
3.常見語法
(1)查詢(Query)

用于指定搜索條件,并返回與之匹配的文檔結(jié)果集。以下是一些常見的查詢類型:

  • Match查詢:用于根據(jù)指定字段的內(nèi)容進(jìn)行全文匹配。
  • Term查詢:用于精確匹配某個(gè)字段的值,不進(jìn)行分詞。
  • Range查詢:用于匹配某個(gè)范圍內(nèi)的值。
  • Bool查詢:用于組合多個(gè)查詢條件。
(2)過濾(Filter)

用于篩選滿足指定條件的文檔結(jié)果集。過濾器通常用于在查詢結(jié)果上應(yīng)用額外的限制。以下是一些常見的過濾器類型:

  • Term過濾器:用于精確匹配某個(gè)字段的值。
  • Range過濾器:用于篩選符合某個(gè)范圍條件的值。
  • Bool過濾器:用于組合多個(gè)過濾條件。
(3)聚合(Aggregation)

用于對文檔結(jié)果集進(jìn)行分組和統(tǒng)計(jì)操作,從而生成各種匯總數(shù)據(jù)。聚合可以計(jì)算平均值、總和、最大值、最小值等。以下是一些常見的聚合類型:

  • Terms聚合:根據(jù)指定字段的值進(jìn)行分組,并返回每個(gè)分組的文檔統(tǒng)計(jì)信息。
  • Date Histogram聚合:按照時(shí)間間隔對文檔進(jìn)行分組,并返回每個(gè)時(shí)間間隔的文檔統(tǒng)計(jì)信息。
  • Range聚合:將文檔分組到不同的范圍,并返回每個(gè)范圍的文檔統(tǒng)計(jì)信息。

三、示例枚舉

1.單獨(dú)查詢

我用的ES版本為7.1.0,以下所有示例均基于這個(gè)版本,不同版本在寫法上略有差異,使用時(shí)要注意喔。

(1)基本查詢(Match Query)
  • 查詢指定字段中匹配關(guān)鍵詞或短語的文檔。
  • 示例:查詢"title"字段包含"Elasticsearch"的文檔。
GET /index/_search
{
  "query": {
    "match": {
      "title": "Elasticsearch"
    }
  }
}
(2)多字段查詢(Multi-match Query)
  • 在多個(gè)字段中匹配指定的關(guān)鍵詞或短語。
  • 示例:在"title"和"content"字段中匹配"Elasticsearch"的文檔。
GET /index/_search
{
  "query": {
    "multi_match": {
      "query": "Elasticsearch",
      "fields": ["title", "content"]
    }
  }
}
(3)范圍查詢(Range Query)
  • 根據(jù)范圍條件匹配字段中的值。
  • 示例:查詢價(jià)格在50到100之間的文檔。
GET /index/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 50,
        "lte": 100
      }
    }
  }
}
(4)布爾查詢(Bool Query)
  • 將多個(gè)查詢組合為邏輯上的AND、OR或NOT關(guān)系。
  • 示例:查詢標(biāo)題包含"Elasticsearch"且價(jià)格大于等于50的文檔。
GET /index/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } },
        { "range": { "price": { "gte": 50 } } }
      ]
    }
  }
}
(5)聚合查詢(Aggregation Query)
  • 計(jì)算和統(tǒng)計(jì)數(shù)據(jù)集中的匯總信息。
  • 示例:計(jì)算字段"sales"的總和作為結(jié)果返回。
GET /index/_search
{
  "aggs": {
    "total_sales": {
      "sum": { "field": "sales" }
    }
  }
}
(6)排序(Sorting)
  • 對搜索結(jié)果按照指定字段進(jìn)行排序。
  • 示例:按照"timestamp"字段的降序?qū)Y(jié)果進(jìn)行排序。
GET /index/_search
{
  "sort": [
    { "timestamp": { "order": "desc" } }
  ]
}
(7)分頁(Pagination)
  • 從搜索結(jié)果中獲取特定范圍的文檔。
  • 示例:返回從0開始的10個(gè)文檔作為結(jié)果。
GET /index/_search
{
  "from": 0,
  "size": 10,
  "query": {
    "match_all": {}
  }
}
2.組合查詢

因?yàn)榇蟛糠秩粘J褂?,都是組合查詢,所以在此也羅列一些組合查詢的示例。

(1)組合多個(gè)must查詢
  • 示例:要求標(biāo)題包含"Elasticsearch"且內(nèi)容包含"數(shù)據(jù)分析"的文檔。
GET /index/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } },
        { "match": { "content": "數(shù)據(jù)分析" } }
      ]
    }
  }
}
(2)組合must和should查詢
  • 示例:要求標(biāo)題包含"Elasticsearch"且(價(jià)格大于等于50或評分高于4)的文檔。
GET /index/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } }
      ],
      "should": [
        { "range": { "price": { "gte": 50 } } },
        { "range": { "rating": { "gt": 4 } } }
      ]
    }
  }
}
(3)組合must和must_not查詢
  • 示例:要求標(biāo)題包含"Elasticsearch"且不包含"教程"的文檔。
GET /index/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } }
      ],
      "must_not": [
        { "match": { "title": "教程" } }
      ]
    }
  }
}
(4)組合多個(gè)should查詢
  • 示例:要求標(biāo)題包含"Elasticsearch"或內(nèi)容包含"數(shù)據(jù)分析"或作者是"John"的文檔。
GET /index/_search
{
  "query": {
    "bool": {
      "should": [
        { "match": { "title": "Elasticsearch" } },
        { "match": { "content": "數(shù)據(jù)分析" } },
        { "match": { "author": "John" } }
      ]
    }
  }
}
(5)嵌套組合查詢
  • 示例:要求標(biāo)題包含"Elasticsearch"且(價(jià)格大于等于50或評分高于4)且(內(nèi)容包含"搜索引擎"或標(biāo)簽是"技術(shù)")的文檔。
GET /index/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } }
      ],
      "should": [
        { "range": { "price": { "gte": 50 } } },
        { "range": { "rating": { "gt": 4 } } }
      ],
      "minimum_should_match": 1,
      "filter": [
        { "match": { "content": "搜索引擎" } },
        { "terms": { "tags": ["技術(shù)"] } }
      ]
    }
  }
}
  • 將多個(gè)查詢組合使用bool查詢的must、should或must_not子句。
  • 示例:查詢標(biāo)題包含"Elasticsearch"且(價(jià)格大于等于50或評分高于4)的文檔。
GET /index/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } },
        {
          "bool": {
            "should": [
              { "range": { "price": { "gte": 50 } } },
              { "range": { "rating": { "gt": 4 } } }
            ]
          }
        }
      ]
    }
  }
}

四、總結(jié)

對技術(shù)的態(tài)度還是那句話:只有不斷學(xué)習(xí)才能不斷進(jìn)步,在此也推薦一些關(guān)于ES+DSL的主題文章,可以參考學(xué)習(xí):

  1. “Getting Started with Elasticsearch: A Complete Guide” by Elastic:這篇文章是Elastic官方提供的入門指南,涵蓋了Elasticsearch的基本概念、安裝和配置,以及常見的用例和查詢示例。
  2. “Introduction to Domain-Specific Languages” by Martin Fowler:這是Martin Fowler撰寫的一篇關(guān)于領(lǐng)域特定語言的介紹性文章。它解釋了什么是DSL,為什么使用DSL以及如何設(shè)計(jì)和實(shí)現(xiàn)DSL。
  3. “Creating Domain-Specific Languages with Xtext” by Lars Vogel:這篇文章介紹了使用Xtext開發(fā)領(lǐng)域特定語言的方法。它探討了Xtext的基本概念、工作流程和示例,幫助您開始構(gòu)建自己的DSL。
  4. “Building Domain-Specific Languages in Python” by Andrew Dalke:這篇文章介紹了在Python中構(gòu)建領(lǐng)域特定語言的方法。它包含了一些庫和工具的示例,可以幫助您在Python項(xiàng)目中實(shí)現(xiàn)自定義DSL。

以上是梳理總結(jié)的一些關(guān)于ES+DSL 查詢語法學(xué)習(xí)的內(nèi)容,希望能幫到大家, 如有錯(cuò)誤,歡迎指正。
原創(chuàng)不易,轉(zhuǎn)載請注意出處:
https://blog.csdn.net/weixin_41613094/article/details/131578855文章來源地址http://www.zghlxwxcb.cn/news/detail-529303.html

到了這里,關(guān)于【DSL】ES+DSL 查詢語法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ElasticSearch - DSL查詢文檔語法,以及深度分頁問題、解決方案

    ElasticSearch - DSL查詢文檔語法,以及深度分頁問題、解決方案

    目錄 一、DSL 查詢文檔語法 前言 1.1、DSL Query 基本語法 1.2、全文檢索查詢 1.2.1、match 查詢 1.2.2、multi_match 1.3、精確查詢 1.3.1、term 查詢 1.3.2、range 查詢 1.4、地理查詢 1.4.1、geo_bounding_box 1.4.2、geo_distance 1.5、復(fù)合查詢 1.5.1、相關(guān)性算分 1.5.2、function_score 1.5.3、boolean query 1.6、搜索

    2024年02月07日
    瀏覽(25)
  • 【ElasticSearch-基礎(chǔ)篇】ES高級查詢Query DSL全文檢索

    和術(shù)語級別查詢(Term-Level Queries)不同,全文檢索查詢(Full Text Queries)旨在 基于相關(guān)性搜索和匹配文本數(shù)據(jù) 。這些查詢會對輸入的文本進(jìn)行分析,將其 拆分 為詞項(xiàng)(單個(gè)單詞),并執(zhí)行諸如分詞、詞干處理和標(biāo)準(zhǔn)化等操作。 全文檢索的關(guān)鍵特點(diǎn): 對輸入的文本進(jìn)行分析

    2024年01月22日
    瀏覽(11)
  • 【ElasticSearch-基礎(chǔ)篇】ES高級查詢Query DSL術(shù)語級別查詢并結(jié)合springboot使用

    Elasticsearch 提供了基于 JSON 的完整 Query DSL(Domain Specific Language)來定義查詢。 因Query DSL是利用Rest API傳遞JSON格式的請求體(RequestBody)數(shù)據(jù)與ES進(jìn)行交互,所以我們在使用springboot的時(shí)候也可以很方便的進(jìn)行集成,本文主要講述的就是使用springboot實(shí)現(xiàn)各類DSL的語法查詢。 Elastics

    2024年02月01日
    瀏覽(21)
  • elasticsearch[二]-DSL查詢語法:全文檢索、精準(zhǔn)查詢(term/range)、地理坐標(biāo)查詢(矩陣、范圍)、復(fù)合查詢(相關(guān)性算法)、布爾查詢

    elasticsearch[二]-DSL查詢語法:全文檢索、精準(zhǔn)查詢(term/range)、地理坐標(biāo)查詢(矩陣、范圍)、復(fù)合查詢(相關(guān)性算法)、布爾查詢

    elasticsearch 的查詢依然是基于 JSON 風(fēng)格的 DSL 來實(shí)現(xiàn)的。 Elasticsearch 提供了基于 JSON 的 DSL(Domain Specific Language)來定義查詢。常見的查詢類型包括: 查詢所有 :查詢出所有數(shù)據(jù),一般測試用。例如:match_all 全文檢索(full text)查詢 :利用分詞器對用戶輸入內(nèi)容分詞,然后去

    2024年01月18日
    瀏覽(22)
  • 【Elasticsearch】 10-DSL語法詳解-復(fù)合查詢bool(must、should、must_not、filter)

    Elasticsearch是一個(gè)強(qiáng)大的搜索引擎,它提供了豐富的查詢功能,以幫助你從大規(guī)模數(shù)據(jù)集中檢索相關(guān)的文檔。在Elasticsearch中, bool 查詢是一個(gè)非常重要和強(qiáng)大的工具,它允許組合多個(gè)查詢子句,以構(gòu)建復(fù)雜的查詢邏輯。在本篇文章中,我們將深入探討 bool 查詢,包括其概述、

    2024年02月05日
    瀏覽(51)
  • DB SQL 轉(zhuǎn) ES DSL(支持多種數(shù)據(jù)庫常用查詢、統(tǒng)計(jì)、平均值、最大值、最小值、求和語法)...

    DB SQL 轉(zhuǎn) ES DSL(支持多種數(shù)據(jù)庫常用查詢、統(tǒng)計(jì)、平均值、最大值、最小值、求和語法)...

    1. 簡介 ??日常開發(fā)中需要查詢 Elasticsearch 中的數(shù)據(jù)時(shí),一般會采用 RestHighLevelClient 高級客戶端封裝的API。項(xiàng)目中一般采用一種或多種關(guān)系型數(shù)據(jù)庫(如: Mysql 、 PostgreSQL 、 Oracle 等) + NoSQL(如: Elasticsearch )存儲方案;不同關(guān)系數(shù)據(jù)庫可以采用 Mybatis-Plus 方案屏蔽數(shù)據(jù)庫的方言

    2024年01月17日
    瀏覽(22)
  • 【DSL】ES+DSL 查詢語法

    一、前言 工作中遇到ES的查詢問題,由于業(yè)務(wù)方給的條件不清晰,有些查詢無法實(shí)現(xiàn),需要用到DSL語法查詢實(shí)現(xiàn),很久沒用生疏了,借此機(jī)會復(fù)習(xí)下。 二、定義 1.基本介紹 Elasticsearch(簡稱為ES ),一個(gè)開源的分布式搜索和分析引擎,主要用于處理大量數(shù)據(jù)并提供快速、實(shí)時(shí)

    2024年02月12日
    瀏覽(24)
  • ES高級查詢語法DSL實(shí)戰(zhàn) - 第504篇

    ES高級查詢語法DSL實(shí)戰(zhàn) - 第504篇

    歷史文章( 文章 累計(jì)500+) 《國內(nèi)最全的Spring?Boot系列之一》 《國內(nèi)最全的Spring?Boot系列之二》 《國內(nèi)最全的Spring?Boot系列之三》 《國內(nèi)最全的Spring?Boot系列之四》 《國內(nèi)最全的Spring?Boot系列之五》 《國內(nèi)最全的Spring?Boot系列之六》 《國內(nèi)最全的Spring?Boot系列之七》 E

    2024年04月27日
    瀏覽(22)
  • ElasticSearch DSL語法

    ElasticSearch DSL語法

    一、文檔批量操作 1.批量獲取文檔數(shù)據(jù) 批量獲取文檔數(shù)據(jù)是通過_mget的API來實(shí)現(xiàn)的 (1)在URL中不指定index和type 請求方式:GET 請求地址:_mget 功能說明 : 可以通過ID批量獲取不同index和type的數(shù)據(jù) 請求參數(shù): docs : 文檔數(shù)組參數(shù) _index : 指定index _type : 指定type(7.x的版本不推薦使

    2024年03月16日
    瀏覽(53)
  • sql語句轉(zhuǎn)為es查詢條件(elasticsearch-sql使用)

    github源碼地址: https://gitee.com/weiyxiong_admin/elasticsearch-sql/blob/master/src/test/java/org/nlpcn/es4sql/ExplainTest.java 1、添加pom.xml依賴 2、scala 將sql轉(zhuǎn)為es查詢json語句 3、測試 4、查詢返回結(jié)果展示(即步驟三esJSON結(jié)果打印) 5、打開postman

    2024年02月13日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包