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

Elasticsearch常用DSL語(yǔ)法巧記

 更新時(shí)間:2024年01月25日 11:25:13   作者:不焦躁程序員  
這篇文章主要為大家介紹了Elasticsearch常用DSL語(yǔ)法巧記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

記知識(shí)先記輪廓,關(guān)于DSL語(yǔ)法的輪廓,記住以下3句話即可:

  • 索引、文檔和查詢

  • Match、Term和Bool

  • 還有翻頁(yè)和聚合

1、又愛(ài)又恨的DSL

使用Elasticsearch時(shí),我們一般是調(diào)用RestClient API的方式讀取和寫(xiě)入集群數(shù)據(jù)。有時(shí)也會(huì)使用工具查閱和操作數(shù)據(jù),比如:使用Chrome插件Multi Elasticsearch Head或者CerebroKibana。筆者建議使用Kibana的方式操作集群數(shù)據(jù),使用Multi Elasticsearch Head或者Cerebro從整體上觀察集群。

既然是操作集群數(shù)據(jù),那就繞不開(kāi)ES的DSL語(yǔ)法 — 一個(gè)讓人又愛(ài)又恨的語(yǔ)法。

  • 愛(ài):Http Restful風(fēng)格設(shè)計(jì)的,使用上簡(jiǎn)單,隨手?jǐn)]起一個(gè)工具都支持Http訪問(wèn)。

  • 恨:語(yǔ)法太難記,語(yǔ)法格式在設(shè)計(jì)上有點(diǎn)反人類(lèi),真不知道設(shè)計(jì)者們是怎么想的。不過(guò)你覺(jué)得有更好的方案嗎?

本文整理了一些常用DSL語(yǔ)法,方便記憶,分了如下幾類(lèi):操作索引、操作文檔Match查詢、Term查詢查看分詞。如果碰到復(fù)雜查詢還是建議查閱官網(wǎng)。

2、操作數(shù)據(jù)

在Kibana上操作ES數(shù)據(jù)的方式如下:

2.1、操作索引

創(chuàng)建索引

PUT /goods
{
  "mappings": {
    "properties": {
      "brandName": {
        "type": "keyword"
      },
      "categoryName": {
        "type": "keyword"
      },
      "createTime": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss"
      },
      "id": {
        "type": "keyword"
      },
      "price": {
        "type": "double"
      },
      "saleNum": {
        "type": "integer"
      },
      "status": {
        "type": "integer"
      },
      "stock": {
        "type": "integer"
      },
      "title": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      }
    }
  },
  # 根據(jù)情況選擇是否要修改
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 2
  }
}

刪除索引

DELETE goods

重建索引

有些場(chǎng)景下需要重建索引,比如修改了Mapping,重建步驟如下:

POST _reindex                    
{
  "source": {
    "index": "goods"
  },
  "dest": {
    "index": "goods1"
  }
}

DELETE goods

POST _reindex                    
{
  "source": {
    "index": "goods1"
  },
  "dest": {
    "index": "goods"
  }
}

DELETE goods1

2.2、操作文檔

創(chuàng)建文檔

# 這種方式,同樣的id無(wú)法重新創(chuàng)建
PUT goods/_create/1
{
  "id": 1,
  "brandName": "Apple",
  "categoryName": "手機(jī)",
  "createTime": "2023-10-22 19:12:56",
  "price": 8799,
  "saleNum": 599,
  "status": 0,
  "stock": 1000,
  "title": "Apple iPhone 15 Pro 512GB 遠(yuǎn)峰藍(lán)色 支持移動(dòng)聯(lián)通電信5G 雙卡雙待手機(jī)"
}
# 這種方式,同樣的id會(huì)覆蓋原有的
PUT goods/_doc/2
{
  "id": 2,
  "brandName": "Apple",
  "categoryName": "手機(jī)",
  "createTime": "2023-10-22 19:12:56",
  "price": 8799,
  "saleNum": 599,
  "status": 0,
  "stock": 1000,
  "title": "Apple iPhone 15 Pro 256GB 遠(yuǎn)峰藍(lán)色 支持移動(dòng)聯(lián)通電信5G 雙卡雙待手機(jī)"
}

更新文檔

POST goods/_update/1
{
  "doc": {
    "title":"Apple iPhone 13 Pro (A2639) 256GB 遠(yuǎn)峰藍(lán)色 支持移動(dòng)聯(lián)通電信5G 雙卡雙待手機(jī)111"
  }
}

刪除文檔

DELETE goods/_doc/2

獲取文檔

# 獲取單個(gè)文檔
GET goods/_doc/1

# 批量獲取
GET books/_doc/_mget
{
  "ids": ["1","2"]
}

2.3、Match查詢

Match查詢會(huì)對(duì)查詢內(nèi)容做分詞,然后根據(jù)倒排索引去匹配文檔。Term查詢對(duì)查詢內(nèi)容不做分詞,直接去倒排索引里去匹配文檔。

查詢所有

POST goods/_search
{
  "query": {
    "match_all": {
      
    }
  }
}

match_phrase短語(yǔ)查詢

POST goods/_search
{
  "query": {
    "match_phrase": {
      "title": "支持"
    }
  }
}

匹配查詢

POST goods/_search
{
  "query": {
    "match": {
      "title": "移動(dòng)多余"
    }
  }
}

模糊匹配查詢

POST goods/_search
{
  "query": {
    "wildcard": {
      "title": {
        "value": "*鞋"
      }
    }
  }
}

2.4、Term查詢

Term查詢對(duì)查詢內(nèi)容不做分詞,直接去倒排索引里去匹配文檔。

POST goods/_search
{
  "query": {
    "term": {
      "title": {
        "value": "手機(jī)"
      }
    }
  }
}

# 匹配多個(gè)term
POST goods/_search
{
  "query": {
    "terms": {
      "title": [
        "雙卡",
        "待"
      ]
    }
  }
}

2.5、組合查詢

復(fù)雜查詢基本會(huì)用到bool關(guān)鍵字。

bool + must

# 布爾查詢,可以組合多個(gè)過(guò)濾語(yǔ)句來(lái)過(guò)濾文檔
POST goods/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "title": {
              "value": "Wolfgang Mauerer"
            }
          }
        },
        {
          "term": {
            "date": {
              "value": "2010-06-01"
            }
          }
        }
      ]
    }
  }
}

# 匹配多個(gè)字段
GET product/_search
{
  "query": {
    "bool": {
      "must": [
        { "match_phrase": { "name": "連衣裙" } },
        { "match_phrase": { "en_intro": "korean" } },
        { "match_phrase": { "intro": "御姐" } }
      ]
    }
  }
}

bool + filter + range

POST books/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "author": {
              "value": "Wolfgang Mauerer"
            }
          }
        }
      ],
      "filter": [
        {
          "term": {
            "date": {
              "value": "2010-06-01"
            }
          }
        }
      ]
    }
  }
}


POST goods/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "華為"
          }
        }
      ],
      "filter": [
        {
          "range": {
            "price": {
              "gte": 5000,
              "lte": 10000
            }
          }
        }
      ]
    }
  }
}

2.6、翻頁(yè)查詢

Scroll分頁(yè)

# 第一次使用 scroll API
POST goods/_search?scroll=2m
{
  "query": {
    "match_all": {}
  },
  "size": 2
}
# 進(jìn)行翻頁(yè)
POST /_search/scroll                                                    
{
  "scroll" : "2m",   
  "scroll_id" : "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFkxBWkYwOGw2U1dPSF94aHZTelFkaWcAAAAAAAADHhZoU05ERFl3WFIycXM3M3JKMmRQVkJB" 
}

from + size分頁(yè)

POST goods/_search
{
  "query": {
    "match_all": {
    
    }
  },
  "from": 6,
  "size": 2,
  "sort": [
    {
      "price": {
        "order": "asc"
      }
    }
  ]
}

2.7、聚合查詢

最大、最小、平均

POST goods/_search
{
  "aggs": {
    "avg_price": {
      "avg": {
        "field": "price"
      }
    }
  }
}


POST goods/_search
{
  "aggs": {
    "min_price": {
      "min": {
        "field": "price"
      }
    }
  }
}

POST goods/_search
{
  "aggs": {
    "max_price": {
      "max": {
        "field": "price"
      }
    }
  }
}

范圍查詢

POST goods/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

高亮查詢

POST goods/_search
{
  "query": {
    "match": {
      "title": "跑鞋"
    }
  },
  "highlight": {
    "fields": {
      "body": {
        "pre_tags": [
          "<font color='red'>"
        ],
        "post_tags": [
          "</font>"
        ]
      },
      "title": {}
    }
  }
}

分組查詢

POST goods/_search
{
  "aggs": {
    "brandNameName": {
      "terms": {
        "field": "brandName"
      }
    }
  }
}

子查詢

POST goods/_search
{
  "aggs": {
    "brandNameName": {
      "terms": {
        "field": "brandName"
      },
      "aggs": {
        "avgPrice": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}

2.8、分析分詞

相對(duì)一些分析進(jìn)行分析時(shí),看看ES怎么拆分的,可以用這個(gè)查看。

POST _analyze
{
  "analyzer": "standard",
  "text": "Linus 在90年代開(kāi)發(fā)出了linux操作系統(tǒng)"
}
POST _analyze
{  
    "analyzer": "ik_max_word",
    "text": "Linus 在90年代開(kāi)發(fā)出了linux操作系統(tǒng)"  
}
POST _analyze
{  
    "analyzer": "ik_smart",
    "text": "Linus 在90年代開(kāi)發(fā)出了linux操作系統(tǒng)"  
}
POST _analyze
{  
    "analyzer": "ik_smart",
    "text": "中華人民共和國(guó)國(guó)歌"  
}
POST _analyze
{  
    "analyzer": "ik_max_word",
    "text": "中華人民共和國(guó)國(guó)歌"  
}

3、總結(jié)

本文主要介紹了常見(jiàn)DSL的用法,主要是幫助記憶,避免一些基本的操作還要去查詢文檔的尷尬。記住以下3句話,即可記住DSL的輪廓了:

  • 索引、文檔和查詢

  • Match、Term和Bool

  • 還有翻頁(yè)和聚合

以上就是Elasticsearch常用DSL語(yǔ)法巧記的詳細(xì)內(nèi)容,更多關(guān)于Elasticsearch DSL語(yǔ)法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JavaWeb的監(jiān)聽(tīng)器和過(guò)濾器你了解嗎

    JavaWeb的監(jiān)聽(tīng)器和過(guò)濾器你了解嗎

    這篇文章主要為大家詳細(xì)介紹了JavaWeb的監(jiān)聽(tīng)器和過(guò)濾器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • 基于Java代碼實(shí)現(xiàn)支付充值的通用流程

    基于Java代碼實(shí)現(xiàn)支付充值的通用流程

    本文給大家分享一段java核心代碼實(shí)現(xiàn)支付充值的通用流程,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-05-05
  • Java實(shí)現(xiàn)線程的暫停和恢復(fù)的示例詳解

    Java實(shí)現(xiàn)線程的暫停和恢復(fù)的示例詳解

    這幾天的項(xiàng)目中,客戶給了個(gè)需求,希望我可以開(kāi)啟一個(gè)任務(wù),想什么時(shí)候暫停就什么時(shí)候暫停,想什么時(shí)候開(kāi)始就什么時(shí)候開(kāi)始,所以本文小編給大家介紹了Java實(shí)現(xiàn)線程的暫停和恢復(fù)的示例,需要的朋友可以參考下
    2023-11-11
  • 基于zipoutputStream的簡(jiǎn)單使用

    基于zipoutputStream的簡(jiǎn)單使用

    這篇文章主要介紹了基于zipoutputStream的簡(jiǎn)單使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot用多線程批量導(dǎo)入數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法

    SpringBoot用多線程批量導(dǎo)入數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringBoot用多線程批量導(dǎo)入數(shù)據(jù)庫(kù)實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02
  • java使用OpenCV從視頻文件中獲取幀

    java使用OpenCV從視頻文件中獲取幀

    這篇文章主要為大家詳細(xì)介紹了java使用OpenCV從視頻文件中獲取幀,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Rocketmq之NameServer地址配置及更新過(guò)程

    Rocketmq之NameServer地址配置及更新過(guò)程

    本文介紹了RocketMQ中NameServer地址的配置方式,主要有三種:系統(tǒng)屬性rocketmq.namesrv.addr、環(huán)境變量NAMESRV_ADDR和自動(dòng)獲取url地址,只有第三種方式可以在程序運(yùn)行過(guò)程中動(dòng)態(tài)更新NameServer地址
    2026-04-04
  • Java中自定義泛型方法及其應(yīng)用示例代碼

    Java中自定義泛型方法及其應(yīng)用示例代碼

    泛型方法是Java中一個(gè)強(qiáng)大的特性,它允許我們?cè)诜椒?jí)別使用類(lèi)型參數(shù),提高代碼的復(fù)用性和類(lèi)型安全性,通過(guò)本文,讀者可以學(xué)習(xí)如何定義和使用泛型方法,并了解其在處理集合、比較對(duì)象、創(chuàng)建實(shí)例等任務(wù)中的應(yīng)用,感興趣的朋友一起看看吧
    2025-02-02
  • Spring Cloud Gateway層限流實(shí)現(xiàn)過(guò)程

    Spring Cloud Gateway層限流實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了Spring Cloud Gateway層限流實(shí)現(xiàn)過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringBoot如何接收前端傳來(lái)的json數(shù)據(jù)

    SpringBoot如何接收前端傳來(lái)的json數(shù)據(jù)

    這篇文章主要介紹了SpringBoot如何接收前端傳來(lái)的json數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論

五家渠市| 贞丰县| 迁西县| 南陵县| 伊宁县| 饶阳县| 沙坪坝区| 循化| 阿瓦提县| 柞水县| 东阿县| 锡林浩特市| 健康| 读书| 桂东县| 福建省| 棋牌| 石家庄市| 民和| 平果县| 舞钢市| 盐城市| 社旗县| 柘城县| 栾城县| 玉林市| 泗水县| 嘉黎县| 曲靖市| 吉木乃县| 龙胜| 子长县| 波密县| 苗栗市| 施甸县| 牙克石市| 白朗县| 淮北市| 晴隆县| 湖北省| 新安县|