Elasticsearch 入門實戰(3)--REST API 使用

来源:https://www.cnblogs.com/wuyongyin/archive/2022/07/09/16377286.html
-Advertisement-
Play Games

Arrays類的常用方法 代碼示例: public class ArrayDemo { public static void main(String[] args) { int[] a={1,2,57,8,1,58,4,51,5,45,15,1}; System.out.println(a); // ...


本文主要介紹 Elasticsearch REST API 的使用,相關的環境及軟體信息如下:CentOS 7.6.1810、Elasticsearch 8.2.2。

1、REST API 使用方法

curl -X <VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' ‐d '<BODY>'

說明:

參數 說明
<VERB> 請求方法,如:GET,POST,PUT,HEAD 或 DELETE
<PROTOCOL> 協議,http 或 https
<HOST> 主機
<PORT> Elasticsearch 服務埠,預設為9200
<PATH> API 端點
<QUERY_STRING> 請求參數
<BODY> JSON 格式的請求體

2、Compact and aligned text (CAT) APIs

cat API 是提供給人在 Kibana 控制台或命令行中使用的,不適合應用程式調用。

2.1、查看集群健康狀況

curl -X GET "http://10.49.196.11:9200/_cat/health?v=true"

2.2、查看集節點信息

curl -X GET "http://10.49.196.11:9200/_cat/nodes?v=true"

3、Index APIs

3.1、創建索引

同時設置了 setting 和 mapping 信息;setting 裡面包含分片和副本信息,mapping 里包含欄位設置的詳細信息。

curl -X PUT -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index' -d '
{
  "settings": {
    "index": {
      "number_of_shards": 2,
      "number_of_replicas": 1
      }
  },
  "mappings": {
    "properties": {
      "age": {
        "type": "integer"
      },
      "name": {
        "type": "keyword"
      },
      "poems": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word"
      },
      "about": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word"
      },
      "success": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word"
      }
    }
  }
}'

3.2、修改 _mapping 信息

欄位可以新增,已有的欄位只能修改欄位的 search_analyze r屬性。

curl -X PUT -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index' -d '
{
  "properties": {
    "name": {
      "type": "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_max_word"
    },
    "age": {
      "type": "integer"
    },
    "desc": {
      "type": "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_smart"
    }
  }
}'

3.3、刪除索引

curl -X DELETE 'http://10.49.196.11:9200/poet-index'

3.4、查詢索引列表

curl -X GET "http://10.49.196.11:9200/*"

curl -X GET "http://10.49.196.11:9200/_all"

3.5、查詢索引詳情

curl -X GET 'http://10.49.196.11:9200/poet-index'

4、Document APIs

4.1、新增文檔

A、設置 id 為 1

curl -X POST -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_create/1' -d '
{
  "age": 30,
  "name": "李白",
  "poems": "靜夜思",
  "about": "字太白",
  "success": "創造了古代浪漫主義文學高峰、歌行體和七絕達到後人難及的高度"
}'

B、不設置 id,將自動生成

curl -X POST -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_doc' -d '
{
  "age": 31,
  "name": "杜甫",
  "poems": "登高",
  "about": "字子美",
  "success": "唐代偉大的現實主義文學作家,唐詩思想藝術的集大成者"
}'

C、批量新增文檔

curl -X POST -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_bulk' -d '
{"index":{"_id":"11"}}
{"age": 30,"name": "杜甫11","poems": "登高","about": "字子美","success": "唐代偉大的現實主義文學作家,唐詩思想藝術的集大成者"}
{"index":{"_id":"12"}}
{"age": 30,"name": "杜甫12","poems": "登高","about": "字子美","success": "唐代偉大的現實主義文學作家,唐詩思想藝術的集大成者"}

'

註:最後的空行是需要的,否則會報錯。

4.2、刪除文檔

curl -X DELETE 'http://10.49.196.11:9200/poet-index/_doc/1'

4.3、更新文檔

只更新參數設置的欄位。

curl -X POST -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_update/1' -d '
{
  "doc": {
    "age": 32,
    "poems": "望廬山瀑布"
  }
}'

4.4、新增或覆蓋文檔

沒有對應 id 的文檔就創建,有就覆蓋更新所有的欄位(相當於先刪除再新增)。

curl -X PUT -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_doc/1' -d '
{
  "age": 31,
  "name": "李白",
  "poems": "靜夜思",
  "about": "字太白"
}'

5、Search APIs

5.1、查詢一個索引的所有文檔

curl -X GET 'http://10.49.196.11:9200/poet-index/_search'

5.2、根據 id 查詢文檔

curl -X GET 'http://10.49.196.11:9200/poet-index/_doc/1'

5.3、term 查詢

term 查詢不會對輸入的內容進行分詞處理,而是作為一個整體來查詢。

A、查詢單個詞

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "term": {
      "name": {
        "value": "李白"
      }
    }
  }
}'

B、查詢多個詞

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "terms": {
      "name": ["李白", "杜甫"]
    }
  }
}'

5.4、range 查詢

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "range": {
      "age": {
        "gte": 20,
        "lte": 35
      }
    }
  }
}'

5.5、全文查詢

5.5.1、match

對輸入的內容進行分詞處理,再根據分詞查詢。

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "match": {
      "success": "理想主義"
    }
  },
  "from": 0,
  "size": 10,
  "sort": [{
    "name": {
      "order": "asc"
    }
  }]
}'

5.5.2、multi_match

多欄位匹配。

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "multi_match": {
      "query": "太白",
      "fields": ["about", "success"]
    }
  }
}'

5.5.3、match_phrase

匹配整個查詢字元串。

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "match_phrase": {
      "success": "文學作家"
    }
  }
}'

5.5.4、match_all

查詢所有數據。

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "match_all": {
     }
  }
}'

5.5.5、query_string

query_string 可以同時實現前面幾種查詢方法。

A、類似 match

curl -X GET  -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "query_string": {
      "default_field": "success",
      "query": "古典文學"
    }
  }
}'

B、類似 mulit_match

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "query_string": {
      "query": "古典文學",
      "fields": ["about", "success"]
    }
  }
}'

C、類似 match_phrase

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "query_string": {
      "default_field": "success",
      "query": "\"古典文學\""
    }
  }
}'

D、帶運算符查詢,運算符兩邊的詞不再分詞

1、查詢同時包含 ”文學“ 和 ”偉大“ 的文檔

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "query_string": {
      "default_field": "success",
      "query": "文學 AND 偉大"
    }
  }
}'

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "query_string": {
      "fields": ["success"],
      "query": "文學 偉大",
      "default_operator": "AND"
    }
  }
}'

2、查詢 name 或 success 欄位包含"文學"和"偉大"這兩個單詞,或者包含"李白"這個單詞的文檔。

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "query_string": {
      "query": "(文學 AND 偉大) OR 李白",
      "fields": ["name", "success"]
    }
  }
}'

5.5.6、simple_query_string

類似 query_string,主要區別如下:

1、不支持AND OR NOT ,會當做字元處理;使用 + 代替 AND,| 代替OR,- 代替 NOT
2、會忽略錯誤的語法

查詢同時包含 ”文學“ 和 ”偉大“ 的文檔:

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "simple_query_string": {
      "fields": ["success"],
      "query": "文學 + 偉大"
    }
  }
}'

5.6、模糊查詢

模糊查詢時使用的參數:

fuzziness

允許的最大編輯距離,預設不開啟模糊查詢,相當於 fuzziness=0。支持的格式

1、可以是數字(0、1、2)代表固定的最大編輯距離

2、自動模式,AUTO:[low],[high]

    查詢詞長度在 [0-low)範圍內編輯距離為 0(即強匹配)

    查詢詞長度在 [low, high) 範圍內允許編輯 1 次

    查詢詞長度 >high 允許編輯 2 次

prefix_length

控制兩個字元串匹配的最小相同的首碼大小,也就是前 n 個字元不允許編輯,必須與查詢詞相同,預設是 0,大於 0 時可以顯著提升查詢性能

max_expansions

產生的最大模糊選項

transpositions

相鄰位置字元互換是否算作 1 次編輯距離,全文查詢不支持該參數

A、全文查詢時使用模糊參數

先分詞再計算模糊選項。

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "match": {
        "success": {
         "query": "古典文化",
        "fuzziness": 1,
        "prefix_length": 0,
        "max_expansions": 5
        }
    }
  }
}'

B、使用 fuzzy query

對輸入不分詞,直接計算模糊選項。

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "fuzzy": {
      "success": {
        "value": "理想",
        "fuzziness": 1,
        "prefix_length": 0,
        "transpositions": true
      }
    }
  }
}'

5.7、組合查詢

組合查詢使用 bool 來組合多個查詢條件。

條件 說明
must 同時滿足
should 滿足其中任意一個
must_not 同時不滿足
filter 過濾搜索,不計算得分

A、查詢 success 包含 “思想” 且 age 在 [20-40] 之間的文檔:

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "bool": {
      "must": [{
        "simple_query_string": {
          "query": "思想",
          "fields": ["success"]
        }
      }, {
        "range": {
          "age": {
            "gte": 20,
            "lte": 40
          }
        }
      }]
    }
  }
}'

B、過濾出 success 包含 “思想” 且 age 在 [20-40] 之間的文檔,不計算得分:

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "query": {
    "bool": {
      "filter": [{
        "simple_query_string": {
          "query": "思想",
          "fields": ["success"]
        }
      }, {
        "range": {
          "age": {
            "gte": 20,
            "lte": 40
          }
        }
      }]
    }
  }
}'

5.8、聚合查詢

A、求和

curl -X GET -H 'Content-Type:application/json' 'http://10.49.196.11:9200/poet-index/_search' -d '
{
  "aggs": {
    	   

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

-Advertisement-
Play Games
更多相關文章
  • SpringBoot開發 - 如何定製自己的Banner?還能用圖片? 我們在啟動Spring Boot程式時,有SpringBoot的Banner信息,那麼如何自定義成自己項目的信息呢? @pdai SpringBoot開發 - 如何定製自己的Banner?還能用圖片? 什麼是Banner 如何更 ...
  • Java面向對象(二) 五、方法 5.1 方法的重載(overload) 定義:在同一個類中,允許定義多個相同名字的方法,只要參數列表(參數類型或者參數個數)是不同的。 判斷是否為方法重載: (1)同一個類,同樣的方法名,不同的參數列表! (2)與方法修飾符、方法返回值、形參名、方法體無關! pub ...
  • Reentrant 2 前兩篇寫完了後我自己研究了下,還有有很多疑惑和問題,這篇就繼續以自問自答的方式寫 如果沒看過第1篇的可以先看看那個https://www.cnblogs.com/sunankang/p/16458795.html public final void acquire(int a ...
  • Aspose簡介 Aspose.Total是Aspose公司旗下全套文件格式處理解決方案,提供最完整、最高效的文檔處理解決方案集,無需任何其他軟體安裝和依賴。主要提供.net、java、C++d三個開發語言的工具包,通過它,可以對辦公文檔格式的轉換和文檔內容的線上編輯,如:Word, Excel, ...
  • Java面向對象(一) 一、面向過程(POP)與面向對象(OOP) 二者都是一種思想,面向對象是相對於面向過程而言的。面向過程,強調的是功能行為,以函數為最小單位,考慮怎麼做。面向對象,將功能封裝進對 象,強調具備了功能的對象,以類/對象為最小單位,考慮誰來做。 面向對象的三大特征: 封裝 繼承 多 ...
  • 稀疏組織 當一個數組中大部分元素為0,或者為同一個值的數組時,可以用稀疏數組來保存該數組 稀疏數組,記錄一共有幾行幾列,有多少個不同值 把具有不同值的元素和行里了及值記錄在一個小規模的數組中,從而縮小程式的規模! 我們定義一下原始數組: 原始數組如下: 0 0 3 0 0 0 0 0 0 4 0 0 ...
  • 歡迎關註公眾號:bin的技術小屋,本文圖片載入不出來的話可查看公眾號原文 本系列Netty源碼解析文章基於 4.1.56.Final版本 1. 前文回顧 在前邊的系列文章中,筆者為大家詳細剖析了 Reactor 模型在 netty 中的創建,啟動,運行,接收連接,接收數據,發送數據的完整流程,在詳細 ...
  • 一年一度的面試高峰期又來了,技術學習群的很多朋友問我有沒有關於JVM基礎面試題,網上各種面試題沒有分類很混亂,無法系統性參考學習。 於是,我就把之前整理的以及我面試過的真題和答案都整理了一份分享給大家。共計108道面試題! 持續根據技術群反饋不端更新,將涵蓋內容包括: Java設計模式、Spring ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...