Elasticsearch高階使用方法有哪些?

2020-12-12 劉小愛

今天是劉小愛自學Java的第160天。

感謝你的觀看,謝謝你。

學習計劃安排,關於搜索功能:

搜索結果過濾的補充說明。布爾組合查詢、範圍查詢…等多種高級查詢。以及非常重要的聚合查詢,其兩種常用類型:桶和度量的說明與使用。昨天學了match匹配和term匹配,這是兩種最基礎也很重要的查詢方式,使用起來也簡單。

一、結果過濾

補充一個知識點,關於結果過濾。

先將例子中索引庫的數據做一個簡單的說明,昨天的學習中也有詳細介紹。

索引庫liuxiaoai01中有title和price兩個欄位,添加了「小愛手機」、「大愛手機」、「超愛手機」和「小愛電視」一共4條數據。

如果不將結果過濾,在結果中會將title和price對應的數據都顯示出來。

而通過"_source"就能指定欄位,上圖中指定了title欄位,所以價格數據就被過濾掉了。

除了上述用法,還有兩種用法

①includes的使用

includes翻譯過來就是包含的意思。

根據其語義理解其作用,也就是說如果索引庫中有多個欄位,可以通過includes來指定想要顯示的欄位。

②excludes的使用

excludes翻譯過來就是排除的意思。

也就是可以通過excludes指定不想要顯示的欄位,很好理解

二、高階查詢

1布爾組合查詢

關鍵字是bool,它本身並不是一種查詢方式,而是將查詢方式通過邏輯運算組合起來了。

①must

翻譯過來就是必須的意思,可以填寫多個查詢條件(中括號本身表示的也就是數組)

多個查詢條件通過must連接,相當於以前常用的and,說白了也就是邏輯運算符「與」。

②must_not

剛好就和上述must相反,說白了也就是邏輯運算符「與」。

③should

通用的道理:多個查詢條件通過should連接,相當於以前常用的or,說白了也就是邏輯運算符「與」。

ps:關於其格式使用,不要看它圖中好像挺複雜的樣子,其實都可以通過工具有提示,並且這些寫多了基本也就知道了。

2範圍查詢

商品都有自己的價格,用戶可以通過設定價格區間搜索到對應的商品。

range就可以實現範圍查詢,其中通過四種字符說明查詢的區間。

gt:表示大於get:表示大於等於lt:表示小於lte:表示小於等於3模糊查詢

實際應用中用戶搜索時輸入的詞條與實際詞條存在偏差,但也能搜索到對應的數據,這就需要使用到模糊查詢了。

關鍵字是fuzzy,翻譯過來也就是模糊的。

上述例子中,我添加了一個apple數據,查詢的時候通過appla就可以模糊查詢到,但是偏差的編輯距離不能超過2,其中也可以通過fuzziness來指定允許的編輯距離。

此外還有過濾,排序這些操作,並且上述這些操作一般都是組合起來使用的,其實無外乎就是記住關鍵字:

關於過濾對應的也就是filter。關於排序也就對應著sort。三、聚合aggregations

Elasticsearch中的聚合包含多種類型,最常用的有兩種:

①桶(bucket)

其實蠻好理解的,比如上海現在一直在執行的垃圾分類,就有多個桶:幹垃圾桶、溼垃圾桶、有害垃圾桶以及可回收物桶。

所以桶的作用就在於按照某種方式對數據進行分組,它只負責分組,不進行運算。

②度量(metrics)

也就是我們以前學的聚合函數,比如求平均值、最大值、最小值以及求和…等這些運算。

2聚合的使用

在使用之前,我們需要創建一個索引庫並添加數據,作為聚合的測試數據。

cars索引庫,有color和make兩個欄位,欄位類型都為keyword,也就是不分詞。

也就是關於汽車的一個索引庫,有顏色和生產商這兩個欄位。

根據我們這兩天的學習情況就可以簡單地實現,具體添加了哪些數據就不做說明了。

桶的使用

size表示是查詢條數,我這裡設置為1,主要在於一個了解,重點在於聚合結果。

aggs也就是聚合aggregations的簡寫,說明這是一個聚合查詢:

popular_make:聚合名,這是自定義的一個名稱,儘量見名知義即可。terms:劃分桶的方式,有多種方式,這裡是根據詞條劃分。field:劃分桶的欄位,這裡根據make劃分。這樣聚合之後,索引庫中的數據就根據field這個欄位劃分成了4個桶:例子中也就是"honda"、"ford"、"toyota"、"bmw"。

elasticsearch中關於桶的劃分方式有多種:

Date Histogram:根據日期分組。Historgram:根據數值分組。Terms:根據詞條內容分組,也就是上述使用的。Range:數值和日期的範圍分組。……等等多種方式。度量的使用

認真觀察①和②會發現它們的格式就是一樣的,格式無外乎就是4步驟:

aggs說明是聚合查詢。給這個聚合自定義一個名稱。說明聚合類型:①中terms是桶的類型,②中avg是度量的類型。field說明聚合欄位:①中根據make劃分成多個桶,②中求桶中price欄位的平均值。上述例子也能看出聚合之間能嵌套使用。

elasticsearch中度量的劃分方式也有多種:

Avg求平均值;Max求最大值;Min求最小值;Sum求和……等等多種度量聚合方式

當然關於聚合的使用,spring集成了一個子模塊Spring Data Elasticsearch,在Java中使用起來更簡單,具體後續說明。

最後

行有不得反求諸己,我是@劉小愛

一個白天上班晚上學習的95後滬漂,不為其它,只為學會自律做好自己,也願我的每日打卡能給你帶來勇氣,歡迎點讚關注和評論。

相關焦點

  • 在elasticsearch中使用function_score查詢
    /guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-decay四、random_scoring隨機一致性函數,可以隨用戶而變,官方示例:GET /_search{ "query": { "function_score": {
  • ElasticSearch
    • 映射(mapping) mapping定義了每個欄位的類型、欄位所使用的分詞器等。相當於關係型資料庫中的表結構。 • 文檔(document) Elasticsearch中的最小數據單元,常以json格式顯示。一個document相當於關係型資料庫中的一行數據。
  • Hadoop 讀寫 Elasticsearch
    使用Hadoop操作Elasticsearch的方法,關鍵是指定InputFormatClass : EsInputFormat.classOutputFormatClass: EsOutputFormat.class,這個好像是ES官方提供的集成包。網上查了相關資料貌似挺少的。
  • 深入淺出 spring-data-elasticsearch 之 ElasticSearch 架構初探(一)
    下面有 3 個節點,第 1 個節點有:2 個主分片和 1 個副分片。如圖:那麼,只有一個節點的 ElasticSearch 服務會存在瓶頸。如圖:分片(Shard)分片,是 ES 節點中最小的工作單元。分片僅僅保存全部數據的一部分,分片的集合是 ES 的索引。
  • ElasticSearch-hard插件及IK分詞器安裝
    如果有頁面可以查看就更好了。有沒有呢?當然有了:elasticSeard-head這個插件就可以實現這個功能。我們先來看看使用插件後的效果:ElasticSearch-head是什麼?ElasticSearch-head:是集群管理、數據可視化、增刪改查、查詢語句可視化工具。
  • 《Elasticsearch 權威指南》中文版
    在幾十位社區同學的共同努力下,《Elasticsearch 權威指南》的翻譯工作接近尾聲,在線訪問連結如下:
  • Elasticsearch實現原理分析
    Elasticsearch集群中的節點可以通過三種不同的方式進行配置:Master節點控制Elasticsearch集群,並負責在集群範圍內創建/刪除索引,跟蹤哪些節點是集群的一部分,並將分片分配給這些節點。主節點一次處理一個集群狀態,並將狀態廣播到所有其他節點,這些節點需要響應並確認主節點的信息。
  • 如何使用Elasticsearch和cAdvisor監控Docker容器
    本文的目標是介紹 Elasticsearch + Kibana + cAdvisor 的用法,使用它們來收集 Docker 容器的參數,分析數據並產生可視化報表。 閱讀本文後你可以發現有一個監控儀錶盤能夠部分解決上述列出的問題。但如果只是使用 cAdvisor,有些參數就無法顯示出來,比如 Swarm 模式的節點。
  • Open Distro for Elasticsearch 1.1.0 發布,Elasticsearch 發行版
    Open Distro for Elasticsearch 是 AWS 開源的 Elasticsearch 發行版。可以 GitHub 存儲庫中的發行說明中找到有關增強、bug 修復和更多信息的詳細信息:https://github.com/opendistro-for-elasticsearch新特性此版本中提供一些新的插件,以便集成到開發者的應用程式中,雖然這些插件屬於 alpha 版本。
  • 全文搜尋引擎ElasticSearch入門教程
    $ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip  $ unzip elasticsearch-5.5.1.zip  $ cd elasticsearch-5.5.1/  接著,進入解壓後的目錄,運行下面的命令,啟動 Elastic。
  • Elasticsearch Analyzer
    2 Elasticsearch Analyzer的結構一般地,Elasticsearch Analyzer由character filter、tokenizer和token filter級聯而成,其中tokenizer有且只能有一個
  • elasticsearch 八、重要的配置更改
    集群名稱改成elasticsearch_production,這麼一個簡單的修改可以避免很多的痛心。Elasticseach by default starts a cluster named elasticsearch.
  • 為什麼Elasticsearch查詢變得這麼慢了?
    默認情況下,所有版本的Elasticsearch都會關閉慢速日誌,因此您必須對群集設置和索引設置進行一些更新。這些示例適用於使用elasticsearch 6.2,但您可以在此處找到所有以前的版本。 只需將$ES_version替換為您正在使用的版本,例如5.5版本設置官網參考:http://t.cn/E7Hq2NG。
  • elasticsearch Discovery 發現模塊學習
    一、基於單播的方式發現可以在 elasticsearch.yml 配置文件中使用discovery.zen.ping.unicast.hosts靜態設置設置主機列表。discovery.zen.ping.unicast.hosts: ["host1", "host2"]具體的值是一個主機數組或逗號分隔的字符串。
  • 搜尋引擎 Elasticsearch 中文擴展分詞器使用,更快更準確!
    Elasticsearch用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。官方客戶端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和許多其他語言中都是可用的。根據DB-Engines的排名顯示,Elasticsearch是最受歡迎的企業搜尋引擎,其次是Apache Solr,也是基於Lucene。
  • 2021-Java後端工程師面試指南-(Elasticsearch)
    Restful實時搜索和分析引擎(實時)高擴展性,可擴展至上百臺伺服器,處理PB級結構化或非結構化數據Elasticsearch用於全文檢索,結構化搜索,分析/合併使用聊聊Elasticsearch的特性:Elasticsearch沒有典型意義的事務(無事務性)什麼是全文檢索和Lucene?
  • 這篇實戰攻略,帶你輕鬆入門Elastic search
    什麼是Elasticsearch,為什麼要使用它?Elasticsearch 是一個分布式、RESTful 風格的搜索和數據分析引擎。它基於Lunece實現,使用java語言編寫。Lunece是一個優秀的搜尋引擎庫,但它使用起來非常複雜。
  • Elasticsearch官方文檔離線訪問實操指南
    步驟3:輸入elasticsearch 搜索下載官方文檔到本地。其實2步驟有了,拿走安裝包、拷貝離線文檔,就能搞定了。上連結——我做成了綠色包。step1:安裝zeal-0.6.1-windows-x64.msiStep2:將 Elasticsearch 離線文檔 docs.zip 解壓到指定路徑,如:D:\test\docs.step3:Edit -> Preferences -> Docset storage -> Directory -> 設置 elasticsearch離線文檔的路徑(見step2 設置
  • ElasticSearch介紹以及使用
    3. count為計算總數,參數("", "",索引名稱, 檢索式, 返回類型有兩種@JSON@XML),若此方法有權限限制,可以從esSearch檢索結果中的「hitsCount」欄位獲取總數。4. singleGet為獲取單條數據,參數("", "",索引名稱, 主鍵ID, 返回類型有兩種@JSON@XML),若此方法有權限限制,可以從esSearch檢索結果中設置檢索式獲取1條來獲取單條數據。
  • 基於Ansj 的 elasticsearch 2.3.1 中文分詞插件
    前言這是一個elasticsearch的中文分詞插件,基於Ansj中文分詞。發起者Onni大神。