es 筆記二之基礎查詢

来源:https://www.cnblogs.com/hunterxiong/archive/2023/05/19/17416359.html
-Advertisement-
Play Games

> 本文首發於公眾號:Hunter後端 > 原文鏈接:[es筆記二之基礎查詢](https://mp.weixin.qq.com/s/VW0QCuW-ONEH-TRB2WF4GQ) 這一篇筆記介紹 es 的基礎查詢。 基礎查詢包括很多,比如排序,類似資料庫 limit 的操作,like 操作,與或非 ...


本文首發於公眾號:Hunter後端
原文鏈接:es筆記二之基礎查詢

這一篇筆記介紹 es 的基礎查詢。

基礎查詢包括很多,比如排序,類似資料庫 limit 的操作,like 操作,與或非等,對於這些操作,我會在介紹他們的用法之後加上對應的資料庫 sql 便於理解。

註意: 下麵的操作都在 kibana 中實現

以下是本篇文章目錄:

  1. 全量查詢
  2. 返回數據排序
  3. 限制返回條數
  4. 指定欄位搜索
  5. 多條件查詢
  6. 大小於過濾

1、全量查詢

如果是想要查看 es 中都有哪些 index,可以如下操作:

GET /_cat/indices

然後可以看到在右側會輸出所有的 index,其中就包含我們上一篇筆記導入的 bank 數據,接下來我們使用 bank 作為查詢示例。

如果我們想查看 bank 中的全部數據,可以如下操作,但是不指定 size 參數的話預設最多只返回 10 條數據:

GET /bank/_search

出來的結果大致如下:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1000,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "bank",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "account_number" : 1,
          "balance" : 39225,
          "firstname" : "Amber",
          "lastname" : "Duke",
          "age" : 32,
          "gender" : "M",
          "address" : "880 Holmes Lane",
          "employer" : "Pyrami",
          "email" : "[email protected]",
          "city" : "Brogan",
          "state" : "IL"
        }
      },
      ...
    ]
  }
}

took 表示查詢花費了多少時間,以毫秒為單位

time_out 表示查詢是否超時

_shards 表示分片的查詢信息,表示有多少個分片被查詢,失敗,和跳過

然後查詢的結果都被放在 hits 欄位下,在 hits 信息中,

hits.total 表示查詢到了多少匹配的數據

hits.hits 是一個數組,包含了返回信息的全部內容,每個元素都是單個查詢的返回結果。

在每個元素中,_index,_type,_id,_score 表示單條數據的所屬的資料庫信息

_source 其中包含了獲取信息的欄位信息,如果沒有指定欄位,則返回該數據所有欄位。

2、返回數據排序

查詢出的數據如果想要以某種順序返回,可以使用 sort 來排序

比如說根據 balance 倒序排序

GET /bank/_search
{
  "sort": [
    {"balance": {"order": "desc"}}
  ]
}

這條數據對應於 sql 中的語法就是:

order by balance desc

sort 後接一個數組,表示可以根據多個欄位進行正序,逆序的排序方式。

3、限制返回條數

在前面的搜索中可以看出,如果不限定返回條數,系統會預設返回 10 條數據,在 es 中有類似於 MySQL 的 limit 和 offset 的操作,那就是 size 和 from。

from 表示從第 n 個開始獲取數據,從 0 開始取值

size 表示獲取數據量的大小。

比如說從第0條數據開始,獲取5條數據,可以如下操作:

GET /bank/_search
{
  "sort": [
    {"balance": {"order": "asc"}}
  ],
  "from": 0,
  "size": 5
}

對應於 sql 語法是:

limit 5 offset 0;

4、指定欄位搜索

關於欄位搜索,有幾個關鍵字,match,match_phrase等。

match 表示模糊搜索,會將搜索的內容先進行分詞操作,然後搜索,比如我們搜索 bank 這個 index 中 address 欄位中包含 "cove" 或者 包含 "lane" 的的數據,我們可以如下操作:

GET /bank/_search
{
  "query": {
    "match": {"address": "Cove Lane"}
  }
}

這條語句類似於 sql 中的:

where address like "%cove%" or address like "%lane%"

只要 address 的字元包含 cove 或者 lane 之一即可。

而如果我們想要實現 cove lane 作為一個整體進行查詢,我們可以使用 match_phrase 來實現:

GET /bank/_search
{
  "query": {
    "match_phrase": {"address": "Cove Lane"}
  }
}

這個操作類似於 sql 中的:

where address like "%mill lane%"

上面這些 match 操作都是大小寫不敏感的。

關於 match 和 match_phrase 的篩選方式這裡只做一個示例,在後面我會單開一篇筆記詳細介紹其用法,針對 text 類型和 keyword 類型的欄位。

5、多條件查詢

多條件,就是與或非連接操作,類似於 sql 中的 and、or、not,對應在 es 中就是 must,should,must_not

在 es 中,每個連接操作都是一個數組,用於連接多個條件操作,示例如下:

GET /bank/_search
{
  "query": {
    "bool": {
      "should": [
        {"match": {"age": 24}},
        {"match": {"age": 25}}
      ],
      "must_not": [
        {"match": {"gender": "M"}}
      ]
    }
  }
}

可以看到,與或非的操作我們是在 query 的 bool 這個 key 的下一級,這個查詢對應的 sql 的查詢是:

where (age = 24 or age = 25) and gender != "M";

6、大小於過濾

在 es 中,大小於的過濾操作是複雜一點的,也在 bool 這個 key 下一級,用到 filter 和 range 關鍵字

大小於的關鍵字和 Django 里的是一樣的用到 gt, gte, lt, lte 這幾個

比如我們要搜索 age 的範圍在 21 到 23 之間的包括 21 和 23 的數據

GET /bank/_search
{
  "query": {
    "bool":{
      "filter": {
        "range": {
          "age": {
            "gte": 21,
            "lte": 22
          }
        }
      }
    }
  }
}

上面的操作可以和與或非的操作進行併列,如果是直接搜索大小於的操作,可以直接如下操作:

GET /bank/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

如果想獲取更多後端相關文章,可掃碼關註閱讀:
image


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近有群友問,怎麼保護髮布的C#代碼不被別人反編譯,這就需要C#代碼混淆組件。C#是一種強大的編程語言,可以用於開發各種類型的應用程式,包括桌面應用程式、Web應用程式和移動應用程式等。但是,由於C#程式易於反編譯,使得代碼的安全性和保護性受到了威脅。為了保護C#代碼,開發人員可以使用代碼混淆器對代 ...
  • ​ 目前市場上出現了多種乙太網溫濕度感測器,也可稱為IP溫濕度感測器,魚龍混雜,良莠不齊,好像有了RJ45網路介面是乙太網溫濕度感測器,單看宣傳頁技術指標參數,好像都差不多,給工程師帶來選擇上的困惑,到底該選擇哪種類型的感測器呢??筆者根據實際測試,現場瞭解等方面總結了以下幾點來進行選擇,供各位工程 ...
  • 如果你想在 Excel 導入過程中滾動顯示導入的數據,可以使用逐行讀取 Excel 數據併在滾動視窗中顯示。 在 VB.NET 中,你可以使用 Excel.Range 對象逐行讀取 Excel 數據,並將每行數據添加到滾動視窗(如 ListBox 或 TextBox)中進行顯示。以下是一個示例代碼, ...
  • 哈嘍大家好,我是鹹魚 隨著互聯網技術的發展,分散式架構越來越被人們所採用。在分散式架構下,**為了實現複雜的業務邏輯,應用程式需要分散式通信實現遠程調用** 而這時候就需要一種協議來支持遠程過程調用,以便實現不同應用程式之間的數據交換和信息傳遞。其中常用的協議包括 HTTP 協議和 RPC 協議 H ...
  • > 本文時間 2023-05-19 > 作者:sugerqube漆瓷 本文重理解,!!忽略環境變數載入原理!! **本文目標**:理解六大環境變數配置,選擇合適的配置文件進行配置 # 配置環境的理由 以**shell**編程為例 ![image](https://img2023.cnblogs.co ...
  • 目錄 一、查看網卡 二、創建虛擬網卡 三、修改主機名 四、管理路由表 五、管理埠 六、網路通信 七、配置網卡 一、查看網卡 命令:ifconfig :查看當前可用設備 主要查看ip地址和mac地址 ifconfig +設備名:表示查看指定設備狀態 ifconfig選項:-a表示查看所有設備(包含沒 ...
  • # 1. 介紹 事情是這樣的,UAT 環境的測試小伙伴向我扔來一個小 bug,說是一個放大鏡的查詢很慢,轉幾分鐘才出數據,我立馬上開發環境試了一下,很快啊我說😏,放大鏡的數據立馬就出來了,然後我登錄 UAT 環境一看,誒是有些慢😕 ,於是開始了我的排查之旅... # 2. 過程 首先我立馬拿到了 ...
  • 資料庫(Database)中的預設欄位(也稱為預設欄位),就是在一般情況下,每個數據表(Table)必須包含的欄位(Field),這類欄位用於滿足特定的數據需求,欄位值的填充或更改一般遵照一定的邏輯要求。預設欄位的設計應該考慮到數據的完整性和一致性,以確保數據的正確與可靠,設計合理的表欄位對於數據的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...