Elasticsearch簡介

来源:https://www.cnblogs.com/sunxn77/archive/2020/03/02/12395083.html
-Advertisement-
Play Games

疫情已經持續了好幾個月了,作為程式員滴我們也幫不上什麼忙,只有老老實實呆在家裡或者出門一定戴口罩準守一些規則,不給國家添亂。不過最近疫情開始有所扭轉,但是還是對國家經濟,對企業業務造成了很大的影響,我也被停止了實習。接下來,可能會面臨著失業,破產等等嚴肅的問題。但是我們還是需要繼續學習,提高自己的競 ...


  疫情已經持續了好幾個月了,作為程式員滴我們也幫不上什麼忙,只有老老實實呆在家裡或者出門一定戴口罩準守一些規則,不給國家添亂。不過最近疫情開始有所扭轉,但是還是對國家經濟,對企業業務造成了很大的影響,我也被停止了實習。接下來,可能會面臨著失業,破產等等嚴肅的問題。但是我們還是需要繼續學習,提高自己的競爭力,才能在疫情過後,有自己的一席之地,可以在合適自己的地方發揮自己的作用。中國加油,武漢加油。

全文檢索Elasticsearch

1. 相關特點:

  • 分散式,無需人工搭建集群(solr需要人為配置,使用zookeeper作為註冊中心)
  • Restful風格,一切API都遵循Rest原則,容易上手
  • 實時搜索,數據更新在ElasticSearch中幾乎是完全同步的。

2. 操作索引

  1. 基本概念:Elasticsearch是基於Lucene的全文檢索庫,本質也是存儲數據,很多概念與MySql類似的。
  2. // 對比關係
    索引集(indices)------------------------------------------------Databases 資料庫 類型(type)---------------------------------------------Table 數據表 文檔(Document)-----------------------------Row 行 欄位(Field)----------------------Columns列

     

  3. 相關解釋:
    • 類型(type):一個索引庫下可以有不同類型的索引,比如商品類型、訂單類型,其數據格式不同。不過這回導致索引庫混亂,因此未來版本會移除這個概念。
    • 映射配置(mappings):欄位的數據類型、屬性、是否索引、是否存儲等特性。
    • 分片(shard):數據拆分後的各個部分。
    • 副本(replica):每個分片的複製。
    • 註意:Elasticsearch本身就是分散式的,因此即使你只有一個節點,Elasticsearch預設也會對你的數據進行分片和副本操作,當你向集群添加數據時,數據也會在新加入的節點中進行平衡。
a、創建索引:
  • 請求方式:PUT
  • 請求路徑:ip地址:埠號/索引庫名(下文相關 HTTP請求路徑 省略)
  • 請求參數:json格式
  • 例子:
    {
           // settings: 索引庫的設置。
    	"settings": {
    		"number_of_shards": 3,     // 分片數量
    		"number_of_replicas": 2    // 副本數量
    	}
    }
b、刪除索引
  • 請求方式:DELETE
  • 請求路徑:/索引庫名
c、查詢索引
  • 請求方式:GET
  • 請求路徑:/索引庫名
d、創建映射欄位
  • 請求方式:PUT
  • 請求路徑:/索引庫名/_mapping/類型名稱
  • 請求參數:json格式
    • 例子:
      {
      	"properties": {
      		"欄位名": {
      			"type": "類型",
      			"index": true,
      			"store": true,
      			"analyzer": "分詞器"  // 分詞器
      		}
      	}
      }
      
  • 相關解釋
    • 類型名稱:就是type的概念,類似於資料庫中的不同表
    • 欄位名:任意寫,可以指定許多屬性,例如
      • type類型,可以是String類型(text【可分詞】、keyword【不可分詞】)、long、short、date、integer、object等。
        • 註意:如果存的是對象,比如:{girl: {name:"rose",age:21}} 會被處理成兩個欄位:girl.name和girl.age
      • index:是否索引,預設為true。如果索引,則可以用來搜索。
      • store:是否存儲,預設為false。在Elasticsearch中,即便store設為false,也可以搜索到結果(原因:Elasticsearch在創建文檔搜索時,會將文檔中的原始數據備份,保存到一個叫做_source的屬性中。而且我們可以通過過濾_source來選擇那些需要顯示,那些不顯示。

3. 新增數據

  • 隨機生成id
    • 請求方式:POST
    • 請求路徑:/索引庫名/類型名稱
    • 請求參數: { "key":  "value" }
  • 自定義id
  • POST /索引庫名/類型名稱/id值
    {
    	...
    }
    
  • 智能判斷:
    • solr:新增數據時,只能使用提前配置好映射屬性的欄位,否則會報錯。
    • Elasticsearch:不需要給索引庫設置任何mapping映射,它也可以根據你輸入的數據來判斷類型,動態添加數據映射。(如果存儲的是String類型數據,ES無智能判斷,它會存入兩個欄位。例如:存入一個name欄位,智能形成兩個欄位  name: text類型    name.keyword: keyword類型)

4. 修改數據:

  • 請求方式: PUT
  • 請求路徑:/索引庫名/類型名稱/id值
  • 註意:修改必須指定id。id對應的文檔存在,則修改;id對應文檔不存在,則新增。

5.  查詢

  • 基本查詢:
    GET /索引庫名/_search
    {
    	"query": {
    		"查詢類型": {
    			"查詢條件":"查詢條件值"
    		}
    	}
    }
    
    例子:  GET /article/_search
    {
    	"query": {
    		"match": {
    			"title": {
    				"query": "廣州上海",
    				"operator":"and"
    			}
    		}
    	}
    }
    
    • 查詢類型:
      • 查詢所有(match_all)【全文檢索】
      • 多欄位查詢(multi_match)
      • GET /索引庫名/_search
        {
        	"query": {
        		"multi_match": {
        			"query": "查詢內容",
        			"fields": ["查詢欄位1","查詢欄位2"]
        		}
        	}
        }
      • 詞條匹配(term):查詢被用於精確值匹配,這些精確值可能是數字、時間、布爾或者那些未分詞的字元串。推薦除了text以外的類型用term,減少分詞帶來的消耗,例
        GET /索引庫名/_search
        {
        	"query": {
        		"term": {
        			"查詢欄位":"查詢內容"
        		}
        	}
        }
      • 結果過濾:{ "_source" : [ "過濾欄位1" , "過濾欄位2" ] }。
        {
        	"_source": {
        		# "includes": "過濾欄位"	# 和上面作用一樣
        		"excludes":"排除過濾欄位"
        	}
        }
  • 高級查詢
    • 模糊查詢(fuzzy)
    • 範圍查詢(range)
      GET /索引庫名/_search
      {
      	"query": {
      		"range": {
      			"查詢欄位": {
      				"gte": 數值,	# 大於,可省略
      				"lte": 數值	# 小於,可省略
      			}
      		}
      	}
      }
    • 布爾查詢和過濾
      GET /索引庫名/_search
      {
      	"query": {
      		"bool": {
      			"must": [
      				{"match": {
      					"查詢欄位": "查詢內容"
      				}}
      			],
      			"filter": {
      				"range": {
      					"過濾欄位": {
      						"gte": 數值
      					}
      				}
      			}
      		}
      	}
      }
    • 排序
      "sort": [
      	{
      			"排序欄位": {
      				"order": "desc"  # 降序排序
      			}
      	}
      ]
    • 分頁: "from" : 數值   "size" : 數值

6. 聚合aggregations:實現對數據的統計、分析

  • 基本概念:包括多種類型,最常見的兩種,一個叫 桶(bucket),一個叫 度量(metrics)
    • 桶:作用:是按照某種方式對數據進行分組,每一組數據在es中稱為一個桶(組)。
      • Terms Aggregation:根據詞條內容分組,詞條內容完全匹配的為一組
      • Range Aggregation:數值和日期的範圍分組,指定開始和結束,然後按段分組
      • Histogram Aggregation:根據數值階梯(Inteval)分組
      • Date Aggregation:根據日期階梯分組,例如:給定階梯為周,會自動每周分為一組
      • GET /索引庫名/_search
        {
        	"aggs": {
        		"桶分組名稱": {
        			"桶分組方式": {	
        				"field": "分桶欄位"
        			}
        		}
        	}
        }
    • 度量:分組完以後,一般會對組中的數據進行聚合運算,例如:求平均值、最大、最小、求和等,這些在es中稱為度量
      • Avg Aggregation:求平均值
      • Max Aggregation:求最大值
      •  Min Aggregation:求最小值
      •  Percentiles Aggregation:求百分比
      •  Stats Aggregation:同時返回avg、max、min、sum、count等
      •  Sum Aggregation:求和
      • Top hits Aggregation:求前幾
      • Value Count Aggregation:求總數
      • GET /索引庫名/_search
        {
        	"aggs": {
        		"度量名稱": {
        			"度量運算": {
        				"field": "運算欄位"
        			}
        		}
        	}
        }
        
        例子:{
        	"size": 0,
        	"aggs": {
        		"popular_brand": {
        			"terms": {
        				"field": "make"
        			},
        		        "aggs": {
        				"price_avg": {
        					"avg": {
        						"field": "price"
        					}
        				}
        			}
        		}
        	}
        }

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

-Advertisement-
Play Games
更多相關文章
  • 概覽 MySQL數據操作: DML 在MySQL管理軟體中,可以通過SQL語句中的DML語言來實現數據的操作,包括 使用INSERT實現數據的插入 UPDATE實現數據的更新 使用DELETE實現數據的刪除 使用SELECT查詢數據以及。 插入數據insert 1. 插入完整數據(順序插入) 語法一 ...
  • 引擎介紹 mysql中的存儲引擎(https://www.cnblogs.com/Eva J/articles/9682063.html) 表介紹 表就相當於文件,表中的一條記錄就相當於文件的一行內容,不同的是,表中的一條記錄有對應的標題,稱為表的欄位 還記得我們之前寫過的‘員工信息表作業’麽?存儲 ...
  • 楔子 假設現在你已經是某大型互聯網公司的高級程式員,讓你寫一個火車票購票系統,來hold住十一期間全國的購票需求,你怎麼寫? 由於在同一時段搶票的人數太多,所以你的程式不可能寫在一臺機器上,應該是多台機器一起分擔用戶的購票請求。 那麼問題就來了,票務信息的數據存在哪裡?存在文件里麽? 如果存儲在文件 ...
  • 作者:友盟+數據技術專家 譚純 簡介: 2020年註定是不同尋常的,突如其來的疫情按下了人們生活的暫停鍵。對於用戶激增的App而言有喜有憂,如何快速沉澱數據資產,因為疫情是脈衝式的需求,等疫情結束之後,如何把這些激增的用戶轉化為留存是很大的挑戰。對於非利好的App,如何讓數據成為護城河。回答這兩個問 ...
  • 本文源碼: "GitHub·點這裡" || "GitEE·點這裡" 一、MySQL邏輯架構 1、邏輯架構圖 基於下麵的邏輯架構圖,可以大致熟悉MySQL各個架構組件之間的協同工作關係。 很經典的C/S架構風格,即客戶端/服務端模式。 2、分層描述 客戶端連接 通常會進行連接池管理,連接用戶許可權認證, ...
  • "概要" "Spark 單機環境配置" "JDK 環境配置" "Spark 環境配置" "python 環境配置" "Spark 使用示例" "示例代碼 (order\_stat.py)" "測試用的 csv 文件內容 (orders.csv)" "運行結果" 概要 大數據和人工智慧已經宣傳了好多年 ...
  • 查詢中出現兩個表的連接,下麵通過實例來講解一下各種連接查詢的不同之處 表 a,和表b 如下圖 a 表中 有 abcd b表中有 abcf 內連接: 得出結果 如圖,選擇等值的結果(abc) 左連接: 查詢結果如圖,選擇a表為基準。(abcd) 右連接: 查詢結果如圖,選擇a表為基準。(abcf) 全 ...
  • 第一步 下載安裝包: 官網 畢竟是甲骨文公司的產品,去官網下真的慢! 這裡有兩個供選擇的,我建議選第一個(因為我先下了第二個,結果失敗了,不知道為什麼總是出錯。) 下載完自行選擇路徑解壓就可以了。 第二步 配置my.ini: 在根目錄下新建文本文件,將下麵的複製上,註意修改尾碼為.ini [mysq ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...