成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

巧記Elasticsearch常用DSL語法

數據庫 其他數據庫 開發
本文整理了一些常用DSL語法,方便記憶,分了如下幾類:操作索引、操作文檔、Match查詢、Term查詢、查看分詞。

記知識先記輪廓,關于DSL語法的輪廓,記住以下三句話即可:

  • 索引、文檔和查詢
  • Match、Term和Bool
  • 還有翻頁和聚合

一、又愛又恨的DSL

使用Elasticsearch時,我們一般是調用RestClient API的方式讀取和寫入集群數據。有時也會使用工具查閱和操作數據,比如:使用Chrome插件Multi Elasticsearch Head或者Cerebro、Kibana。筆者建議使用Kibana的方式操作集群數據,使用Multi Elasticsearch Head或者Cerebro從整體上觀察集群。

既然是操作集群數據,那就繞不開ES的DSL語法 — 一個讓人又愛又恨的語法。

  • 愛:Http Restful風格設計的,使用上簡單,隨手擼起一個工具都支持Http訪問。
  • 恨:語法太難記,語法格式在設計上有點反人類,真不知道設計者們是怎么想的。不過你覺得有更好的方案嗎?

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

二、操作數據

在Kibana上操作ES數據的方式如下:

1.操作索引

(1) 創建索引:

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"
      }
    }
  },
  # 根據情況選擇是否要修改
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 2
  }
}

(2) 刪除索引:

DELETE goods

(3) 重建索引

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

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

DELETE goods

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

DELETE goods1

2.操作文檔

(1) 創建文檔

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

(2) 更新文檔

POST goods/_update/1
{
  "doc": {
    "title":"Apple iPhone 13 Pro (A2639) 256GB 遠峰藍色 支持移動聯通電信5G 雙卡雙待手機111"
  }
}

(3) 刪除文檔

DELETE goods/_doc/2

(4) 獲取文檔

# 獲取單個文檔
GET goods/_doc/1

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

2.Match查詢

Match查詢會對查詢內容做分詞,然后根據倒排索引去匹配文檔。Term查詢對查詢內容不做分詞,直接去倒排索引里去匹配文檔。

(1) 查詢所有

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

(2) match_phrase短語查詢

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

(3) 匹配查詢

POST goods/_search
{
  "query": {
    "match": {
      "title": "移動多余"
    }
  }
}

(4) 模糊匹配查詢

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

4.Term查詢

Term查詢對查詢內容不做分詞,直接去倒排索引里去匹配文檔。

POST goods/_search
{
  "query": {
    "term": {
      "title": {
        "value": "手機"
      }
    }
  }
}

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

5.組合查詢

復雜查詢基本會用到bool關鍵字。

(1) bool + must

# 布爾查詢,可以組合多個過濾語句來過濾文檔
POST goods/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "title": {
              "value": "Wolfgang Mauerer"
            }
          }
        },
        {
          "term": {
            "date": {
              "value": "2010-06-01"
            }
          }
        }
      ]
    }
  }
}

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

(2) 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
            }
          }
        }
      ]
    }
  }
}

6.翻頁查詢

(1) Scroll分頁

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

(2) from + size分頁

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

7.聚合查詢

(1) 最大、最小、平均

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"
      }
    }
  }
}

(2) 范圍查詢

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

(3) 高亮查詢

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

(4) 分組查詢

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

(5) 子查詢

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

8.分析分詞

相對一些分析進行分析時,看看ES怎么拆分的,可以用這個查看。

POST _analyze
{
  "analyzer": "standard",
  "text": "Linus 在90年代開發出了linux操作系統"
}
POST _analyze
{  
    "analyzer": "ik_max_word",
    "text": "Linus 在90年代開發出了linux操作系統"  
}
POST _analyze
{  
    "analyzer": "ik_smart",
    "text": "Linus 在90年代開發出了linux操作系統"  
}
POST _analyze
{  
    "analyzer": "ik_smart",
    "text": "中華人民共和國國歌"  
}
POST _analyze
{  
    "analyzer": "ik_max_word",
    "text": "中華人民共和國國歌"  
}

三、總結

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

  • 索引、文檔和查詢
  • Match、Term和Bool
  • 還有翻頁和聚合
責任編輯:趙寧寧 來源: 不焦躁的程序員
相關推薦

2023-06-13 08:00:57

ChatGPT語言模型

2020-09-28 11:09:54

SQLDSL

2009-12-24 16:20:19

Linux破解PHP

2023-11-13 12:48:32

語言DSL

2022-12-30 09:12:55

查詢es搜索值

2020-12-02 08:31:47

Elasticsear

2009-08-27 09:16:48

F#中DSL原型設計

2010-09-06 13:59:23

CSS縮寫

2009-12-18 15:06:10

Ruby常用庫

2010-12-01 11:29:11

職場

2012-05-08 10:22:47

Windows系統硬件

2022-03-22 10:24:48

Linux開源Elasticsea

2009-12-09 09:22:45

PHP常用語法

2009-11-25 13:31:34

PHP常用語法

2010-01-11 09:53:28

VB.NET語法

2009-12-14 18:23:38

Ruby DSL測試

2019-09-20 10:00:33

SQLMySQL數據

2012-03-14 11:13:27

Java

2009-07-16 13:30:12

resultMapgroupBy屬性

2010-01-13 15:46:21

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产高清免费 | 免费一区 | 亚洲精品久久久一区二区三区 | 翔田千里一区二区 | 欧美影院| 成人av网站在线观看 | 日韩免费成人av | 成人在线国产 | 成年免费在线观看 | 久久精品福利 | 奇米久久 | 免费欧美| 在线免费观看欧美 | 毛片视频网址 | 成人在线免费网站 | 国产欧美一区二区三区免费 | 久久久国产精品一区 | 日本色婷婷| 成人欧美一区二区三区在线观看 | 一区二区三区四区不卡视频 | 国产精品99久久久久久动医院 | 国产精品成av人在线视午夜片 | 日韩久久久久久 | 在线中文视频 | 国产视频一视频二 | 99热精品6| 国产伊人久久久 | 黄色在线观看国产 | 欧美在线资源 | 久久99精品国产麻豆婷婷 | 亚洲一区国产精品 | 日韩一级免费电影 | 亚洲一区欧美 | 91精品国产91久久综合桃花 | 99re在线视频精品 | 亚州精品成人 | 日韩在线视频免费观看 | 欧美日韩视频 | 日本不卡一区二区三区 | 91xxx在线观看 | 夜久久 |