<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      快速開始ElasticSearch

      1.什么是ElasticSearch?

      Elasticsearch是基于Lucene的搜索引擎。它提供了一個分布式,支持多租戶的全文搜索引擎,它具有HTTP Web界面和無模式JSON文檔。 Elasticsearch是用Java開發(fā)的,根據(jù)Apache許可條款作為開源發(fā)布。

      ----來自維基百科的解釋

      我個人的理解是Elasticsearch(以下簡稱ES)是一個支持分布式的全文搜索引擎,因為在海量數(shù)據(jù)搜索時,普通關(guān)系型、非關(guān)系型數(shù)據(jù)庫因為IO讀取、處理器運(yùn)算能力的限制,導(dǎo)致查詢效率難以提升,但是ES是分布式的(能把處理壓力分?jǐn)偨o每個節(jié)點),而且它是給每個詞創(chuàng)建索引,所以查詢效率極高,堪稱即時搜索。

      而且ES能搭配Kibana,實現(xiàn)數(shù)據(jù)的可視化管理與數(shù)據(jù)分析。

      QQ截圖20180906215325

                                                                                 Kibana儀表盤

      2.ES中名詞概念

      2.1 Node和Cluster#

      前面所過ES是一個分布式搜索引擎,其本質(zhì)是一個分布式數(shù)據(jù)庫,可以多臺計算機(jī)上的ES實例協(xié)同工作,這里面的某一臺計算機(jī)上的某個ES實例,就可以稱為一個Node(節(jié)點),所有的這些協(xié)同工作的實例,可以稱為一個Cluster(集群)。

      2.2 Index#

      Elastic 會索引所有字段,經(jīng)過處理后寫入一個反向索引(Inverted Index)。查找數(shù)據(jù)的時候,直接查找該索引。

      所以,Elastic 數(shù)據(jù)管理的頂層單位就叫做 Index(索引)。它是單個數(shù)據(jù)庫的同義詞。每個 Index (即數(shù)據(jù)庫)的名字必須是小寫。

      2.3 Document#

      Index 里面單條的記錄稱為 Document(文檔)。許多條 Document 構(gòu)成了一個 Index。

      Document 使用 JSON 格式表示,下面是一個例子。

      
      {
        "user": "張三",
        "title": "工程師",
        "desc": "數(shù)據(jù)庫管理"
      }
      

      同一個 Index 里面的 Document,不要求有相同的結(jié)構(gòu)(scheme),但是最好保持相同,這樣有利于提高搜索效率。

      2.4 Type#

      Document 可以分組,比如weather這個 Index 里面,可以按城市分組(北京和上海),也可以按氣候分組(晴天和雨天)。這種分組就叫做 Type,它是虛擬的邏輯分組,用來過濾 Document。

      不同的 Type 應(yīng)該有相似的結(jié)構(gòu)(schema),舉例來說,id字段不能在這個組是字符串,在另一個組是數(shù)值。這是與關(guān)系型數(shù)據(jù)庫的表的一個區(qū)別。性質(zhì)完全不同的數(shù)據(jù)(比如productslogs)應(yīng)該存成兩個 Index,而不是一個 Index 里面的兩個 Type(雖然可以做到)。

      根據(jù)規(guī)劃,Elastic 6.x 版只允許每個 Index 包含一個 Type,7.x 版將會徹底移除 Type。

      ----參考阮一峰 全文搜索引擎 Elasticsearch 入門教程

      3.ES工作原理

      Elasticsearch用于構(gòu)建高可用和可擴(kuò)展的系統(tǒng)。擴(kuò)展的方式可以是購買更好的服務(wù)器(縱向擴(kuò)展)或者購買更多的服務(wù)器(橫向擴(kuò)展)。

      Elasticsearch雖然能從更強(qiáng)大的硬件中獲得更好的性能,但是縱向擴(kuò)展有它的局限性。真正的擴(kuò)展應(yīng)該是橫向的,它通過增加節(jié)點來均攤負(fù)載和增加可靠性。如果我們啟動一個單獨的節(jié)點,它還沒有數(shù)據(jù)和索引,這個集群看起來就像下圖。

      集群中一個節(jié)點會被選舉為主節(jié)點(master),它將臨時管理集群級別的一些變更,例如新建或刪除索引、增加或移除節(jié)點等。

      主節(jié)點不參與文檔級別的變更或搜索,這意味著在流量增長的時候,該主節(jié)點不會成為集群的瓶頸。任何節(jié)點都可以成為主節(jié)點。我們例子中的集群只有一個節(jié)點,所以它會充當(dāng)主節(jié)點的角色。

      當(dāng)索引創(chuàng)建完成的時候,主分片的數(shù)量就固定了,但是復(fù)制分片的數(shù)量可以隨時調(diào)整。

      讓我們在集群中唯一一個空節(jié)點上創(chuàng)建一個叫做 blogs 的索引。默認(rèn)情況下,一個索引被分配5個主分片,但是為了演示的目的,我們只分配3個主分片和一個復(fù)制分片(每個主分片都有一個復(fù)制分片):

      PUT /blogs

      {

      "settings" : {

      "number_of_shards" : 3,

      "number_of_replicas" : 1

      }

      }

      我們的集群現(xiàn)在看起來就像上圖,三個主分片都被分配到 Node 1 。

      在單一節(jié)點上運(yùn)行意味著有單點故障的風(fēng)險:沒有數(shù)據(jù)備份。幸運(yùn)的是,要防止單點故障,我們唯一需要做的就是啟動另一個節(jié)點。

      如果我們啟動了第二個節(jié)點,這個集群看起來就像下圖

      第二個節(jié)點已經(jīng)加入集群,三個復(fù)制分片(replica shards)也已經(jīng)被分配了,分別對應(yīng)三個主分片,這意味著在丟失任意一個節(jié)點的情況下依舊可以保證數(shù)據(jù)的完整性。

      文檔的索引將首先被存儲在主分片中,然后并發(fā)復(fù)制到對應(yīng)的復(fù)制節(jié)點上。這可以確保我們的數(shù)據(jù)在主節(jié)點和復(fù)制節(jié)點上都可以被檢索。

      隨著應(yīng)用需求的增長,我們該如何擴(kuò)展?如果我們啟動第三個節(jié)點,我們的集群會自我感知,這時便成為了三節(jié)點集群。

      分片已經(jīng)被重新分配以平衡負(fù)載:

      從 Node 1 和 Node 2 來的分片已經(jīng)被移動到新的 Node 3 上,這樣每個節(jié)點就有兩個分片,以代替之前的三個。這意味著每個節(jié)點的硬件資源(CPU、RAM、I/O)被較少的分片共享,這樣每個分片就會有更好的表現(xiàn)。

      分片本身就是一個完整成熟的搜索引擎,它可以使用單一節(jié)點的所有資源。使用這6個分片(3個主分片和三個復(fù)制分片)我們可以擴(kuò)展最多到6個節(jié)點,每個節(jié)點上有一個分片,這樣就可以100%使用這個節(jié)點的資源了。

      ----參考文獻(xiàn)Elasticsearch: 權(quán)威指南

      4.ES的安裝與使用

      4.1安裝#

      因為每個平臺上ES安裝方法有所區(qū)別,而且網(wǎng)絡(luò)上有較為詳細(xì)的安裝教程,本文在此不再贅述。原本是想著在我的兩臺騰訊云Centos服務(wù)器上,搭建一個ES集群的,但是因為云服務(wù)器內(nèi)存1G,運(yùn)行ES時總是報錯,大體意思是內(nèi)存不足,所以我就在自己的PC上,只搭建了一個ES節(jié)點,還不算ES集群,不過不影響功能的測試。

      Windows環(huán)境下ES 6.4 MSI下載地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.msi

      一路默認(rèn)下一步,安裝完成后,在瀏覽器地址輸入http://localhost:9200/,如果您能看到下列結(jié)果,說明安裝完成。

      復(fù)制代碼
      {
          "name": "DESKTOP-1FC1B1D",
          "cluster_name": "elasticsearch",
          "cluster_uuid": "lZx4n2xzToeaj9k3HEHAqw",
          "version": {
              "number": "6.4.0",
              "build_flavor": "unknown",
              "build_type": "unknown",
              "build_hash": "595516e",
              "build_date": "2018-08-17T23:18:47.308994Z",
              "build_snapshot": false,
              "lucene_version": "7.4.0",
              "minimum_wire_compatibility_version": "5.6.0",
              "minimum_index_compatibility_version": "5.0.0"
          },
          "tagline": "You Know, for Search"
      }
      復(fù)制代碼

      "You Know, for Search"

      ES有一套Restful 風(fēng)格的API系統(tǒng),通過該API我們與ES進(jìn)行交互。

      4.2數(shù)據(jù)的提交#

      利用PostMan向ES POST一條數(shù)據(jù)如下。

      image

      http://localhost:9200/index/test1/1 中Index是該數(shù)據(jù)的Index(上文有介紹Index),test1是該數(shù)據(jù)的Type,1是該條數(shù)據(jù)的Id,該ID在通過ID獲取數(shù)據(jù)時需要用到。

      4.3數(shù)據(jù)通過ID獲取#

      在知道數(shù)據(jù)的Index,Type和ID的情況下,可以通過和上文Post數(shù)據(jù)的Url一樣的格式獲取數(shù)據(jù),不同之處時,此時的HTTP方法時Get,如下:

      image

      4.4數(shù)據(jù)的查詢#

      ES的數(shù)據(jù)查詢語法較為豐富,此處以一個最簡單的查詢?yōu)槔琀ttp方法為POST,請求的Url中同樣指定了Index和Type

      {
         "query" : { "match" : { "tagline" : "for" }}
      }

      指的時查詢tagline中包含的for的數(shù)據(jù),

      image

      其他更詳細(xì)的查詢語法,建議大家查看Elasticsearch: 權(quán)威指南,此處主要拋磚引玉。

      5.Net Core中使用ES

      在上文中,我們了解到,可以通過restful api與ES進(jìn)行交互,那么,如果需要在我們的程序中使用ES,是不是要創(chuàng)建一個這樣的Helper方法,通過HTTP調(diào)用RESTFul API與ES進(jìn)行交互呢?

      不是不可以,但是Elastic為大部分語言都創(chuàng)建了"Clients”,其實就是把上文提及的那些方法進(jìn)行了一個封裝,是我們在代碼中,能夠方便地調(diào)用ES。

      以.Net Core為例,該”Clients”開源在Github:

      https://github.com/elastic/elasticsearch-net

      5.1 SDK(客戶端,Clients)#

      在該倉庫中,其實有Elasticsearch.Net 和 NEST兩個.Net官方SDK,兩個各有特色。

      Elasticsearch.Net 是一個非常low leave而且靈活的SDK,它不在意你如何的構(gòu)建自己的請求和響應(yīng)。它非常抽象,因此所有的Elasticsearch RESTFul API被表示為方法,而且不會影響你構(gòu)建json / request / response對象的方式。 它還內(nèi)置可配置/可覆蓋的群集故障轉(zhuǎn)移重試機(jī)制。

      NEST 是一個 high level SDK, 有非常大的彈性,如果你想更好的提升你的搜索服務(wù),你完全可以使用它來做為你的客戶端。可以映射所有請求和響應(yīng)對象,擁有一個強(qiáng)類型DSL(領(lǐng)域特定語言),并且可以使用.net的特性,如協(xié)變、Auto Mapping Of POCOs,NEST內(nèi)部使用的依然是Elasticsearch.Net客戶端。

      5.2創(chuàng)建一個Demo#

      本Demo我使用的NEST,所以第一步是創(chuàng)建一個Asp.Net Core Api應(yīng)用程序并引入NEST的Nuget包。

      PM> Install-Package NEST

       

      然后我創(chuàng)建一個EsClientProvider,代碼如下:

      復(fù)制代碼
      public class EsClientProvider : IEsClientProvider
          {
              private readonly IConfiguration _configuration;
              private ElasticClient _client;
              public EsClientProvider(IConfiguration configuration)
              {
                  _configuration = configuration;
              }
      
              public ElasticClient GetClient()
              {
                  if (_client != null)
                      return _client;
      
                  InitClient();
                  return _client;
              }
      
              private void InitClient()
              {
                  var node = new Uri(_configuration["EsUrl"]);
                  _client = new ElasticClient(new ConnectionSettings(node).DefaultIndex("demo"));
              }
          }
      復(fù)制代碼

       

      IEsClientProvider代碼如下:

      public interface IEsClientProvider
          {
              ElasticClient GetClient();
          }

       

      然后再Startup的ConfigureServices進(jìn)行服務(wù)的注冊

      復(fù)制代碼
      public void ConfigureServices(IServiceCollection services)
              {
      
                  services.AddSingleton<IEsClientProvider, EsClientProvider>();
      
                  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
              }
      復(fù)制代碼

       

      最后,修改ValueContoller,代碼如下:

      復(fù)制代碼
      public class ValueController : ControllerBase
          {
              private readonly ElasticClient _client;
      
              public ValueController(IEsClientProvider clientProvider)
              {
                  _client = clientProvider.GetClient();
              }
      
              [HttpPost]
              [Route("value/index")]
              public IIndexResponse Index(Post post)
              {
                  return _client.IndexDocument(post);
              }
      
              [HttpPost]
              [Route("value/search")]
              public IReadOnlyCollection<Post> Search(string type)
              {
                  return _client.Search<Post>(s => s
                      .From(0)
                      .Size(10)
                      .Query(q => q.Match(m => m.Field(f => f.Type).Query(type)))).Documents;
              }
          }
      復(fù)制代碼

       

      其中Index方法能進(jìn)行數(shù)據(jù)的提交,Search是通過Post實體的type來進(jìn)行數(shù)據(jù)查詢。

       

      代碼不復(fù)雜,我就不詳細(xì)介紹了,在PostMan中進(jìn)行Search方法的測試,效果如下:

      image

      查詢要求是type是567,響應(yīng)的實體中,type確實為567,Success!

       

      項目完整代碼:https://github.com/liuzhenyulive/Elasticsearch.Net-Demo

      鳴謝:

      https://mp.weixin.qq.com/s/-Ky9iXxnuTg_WmbTCzpV0A

      posted @ 2023-04-06 18:59  春光牛牛  閱讀(52)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 尹人香蕉久久99天天拍| 国产精品白丝一区二区三区| 满城县| 国产成人精品午夜二三区| 天长市| 日韩精品亚洲专在线电影| 国产精品亚洲а∨天堂2021| 99热精国产这里只有精品| 国产美女深夜福利在线一 | 狠狠亚洲色一日本高清色| 97精品亚成在人线免视频| 国精品午夜福利视频不卡| 97人妻免费碰视频碰免| 部精品久久久久久久久| 亚洲精品国产suv一区88| 成人国产亚洲精品一区二| 深田えいみ禁欲后被隔壁人妻| 亚洲日本韩国欧美云霸高清| 亚洲理论在线A中文字幕| 日韩A人毛片精品无人区乱码 | 风流少妇树林打野战视频 | 久热这里只有精品视频3| 97久久久精品综合88久久| 国产熟妇久久777777| 国产精品不卡一区二区三区| 国产精品久久露脸蜜臀| 中文字幕日韩国产精品| 国产不卡精品视频男人的天堂| 给我中国免费播放片在线| 日韩在线观看 一区二区| 亚欧洲乱码视频在线专区| 极品美女自拍偷精品视频| 石台县| 中国女人高潮hd| 亚洲欧洲日产国产 最新| 在线天堂最新版资源| 狠狠久久五月综合色和啪| 亚洲乱妇老熟女爽到高潮的片| av综合亚洲一区二区| 亚洲夂夂婷婷色拍ww47| 精品国产精品中文字幕|