1. 程式人生 > >.net Elasticsearch 學習入門筆記

.net Elasticsearch 學習入門筆記

一. es安裝相關
1.elasticsearch安裝
  執行http://localhost:9200/
2.head外掛
3.bigdesk外掛安裝
(安裝細節百度:windows elasticsearch 安裝,有詳細內容)

二. es外掛相關
http://www.searchtech.pro/elasticsearch-plugins (es 外掛大全)
https://github.com/medcl/elasticsearch-analysis-ik (ik 專案)
https://github.com/lmenezes/elasticsearch-kopf (ES的外掛  監控 節點狀態 , 也可以除錯你的ES查詢)
https://github.com/medcl/elasticsearch-rtf/tree/master (2.1.1 + 1.6ik  還有拼音  和其他分詞器 整合好了)
https://github.com/lmenezes/elasticsearch-kopf (類似head的外掛)
https://www.elastic.co/downloads/marvel (監控ES健康狀態)
konf外掛 (據說能看叢集負載)

三.es C# 客戶端示例

1. 包下載elasticsearch.net,nest 元件。
   nest元件會依賴下載elasticsearch元件。
   使用文件:http://nest.azurewebsites.net/
   備註:.net 使用es的相對少一些,es版本更新也很快,很多使用也都是靠自己揣摩。多交流,多分享。
2. 建立連線客戶端
     public ElasticClient GetClient()
        {
            var node = new Uri("http://192.168.17.54:9200");

            var settings = new ConnectionSettings(
                node,
                defaultIndex: "my-application"

            );
            return new ElasticClient(settings);
        }
3. 建立索引模型(索引結構)


[ElasticType(IdProperty = "Id", Name = "Person")]
        public class Person
        {
           [ElasticProperty(Name = "Id", Type = FieldType.String, Index = FieldIndexOption.NotAnalyzed)]
            public string Id { get; set; }
            public string Firstname { get; set; }
            public string Lastname { get; set; }
            public string[] Chains { get; set; }
           [ElasticProperty(Name = "content", Type = FieldType.String, Index = FieldIndexOption.Analyzed, Analyzer = "ik_max_word")]
            public string Content { get; set; }
        }
     備註:其他人提供的model示例,更詳細些,可下載附件。
4. 索引內容(建立索引)

  private void btnIndex_Click(object sender, EventArgs e)
        {
            //var client = new ElasticsearchClient();
            ////index a document under /myindex/mytype/1
            //var indexResponse = client.Index("myindex", "mytype", "1", new { Hello = "World" });
            var client2 = GetClient();

            //client2.CreateIndex("test");
            //client2.Map<Person>(c => c.MapFromAttributes());

            IEnumerable<Person> persons = new List<Person>
            {
                new Person()
                {
                    Id = "4",
                    Firstname = "aaa",//Boterhuis-040
                    Lastname = "Gusto-040",
                    Chains = new string[]{ "a","b","c" },
                },
                new Person()
                {
                    Id = "5",
                    Firstname = "[email protected]",
                    Lastname = "t Boterhuis 1",
                    Chains = new string[]{ "a","b","c" },
                },
                new Person()
                {
                    Id = "6",
                    Firstname = "Aberdeen #110",
                    Lastname = "[email protected]",
                    Chains = new string[]{ "a","b","c" },
                },
                new Person()
                {
                    Id = "7",
                    Firstname = "Aberdeen #110",
                    Lastname = "t Boterhuis 2",
                    Chains = new string[]{ "a","b","c" },
                },
                 new Person()
                {
                    Id = "8",
                    Firstname = "Aberdeen #110",
                    Lastname = "t Boterhuis 2",
                    Chains = new string[]{ "a","b","c" },
                },
            };
            //foreach(var p in persons)
            client2.IndexMany<Person>(persons,"test");
        }
5. 簡單搜尋示例
  var client = GetClient();
            var rs = client.Search<Person>(s => s.Index("test").QueryString(this.textBox1.Text));
            this.richTextBox1.Text = JsonConvert.SerializeObject(rs.Documents);
6. 索引更新
 private void btnUpdate_Click(object sender, EventArgs e)
        {
            var client2 = GetClient();

            client2.Update<Person, object>(u => u
             .Index("test")
            .Id(4)
            .Doc(new { Id="4", Firstname = "United States" })
            .RetryOnConflict(3)
            .Refresh()
           );

            //var u1 =  new Person()
            //    {
            //        Id = "4",
            //        Firstname = "Boterhuis-040",
            //        Lastname = "Gusto-040",
            //        Chains = new string[]{ "a","b","c" },
            //    };
            //var u2 = new Person()
            //    {
            //        Id = "4",
            //        Firstname = "United States",
            //        Lastname = "Gusto-040",
            //        Chains = new string[] { "a", "b", "c" },
            //    };
            //client2.Update<Person,Person>(u1,u2).
        }

7. 索引刪除
 private void btnDelete_Click(object sender, EventArgs e)
        {
            var client2 = GetClient();
            client2.DeleteIndex("test");
            client2.DeleteIndex("my-application");
        }
8. 總結
以上示例程式碼,簡單的應用已經足夠用。其他的就是高亮和分組。可以看文件。

四. es 叢集
 es 預設是一個叢集,相對solr雲來說配置更簡單,搭建更方便些。但是更多還是要根據業務進行自己的叢集設計還是好費很多時間,很多精力。(上手容易,用好難)

五. es 與solr 對比
個人目前瞭解的:
原來solr資料比較多,現在貌似es的資料更多一點。solr是官方英文pdf,es也是英文的。
原來solr還有中文書籍,現在貌似沒有了。es 目前還有幾本書籍,但是講的es版本略有老舊。
solr上手相對es略微難些。
(n年前,我用的是solr,那時候還沒有solrcloud;es還沒有出來,那時候solr資料反而多。個人也實現了自己的solr叢集方案。其他的功能上的對比,還是百度,不重複。)

六. 如果es客戶端除錯請求
建議下載HTTPAnalyzer之類的tcp攔截工具。這樣可以攔截驗證sdk出來的請求連線,對比資料和書籍看下哪些引數寫錯了,對除錯很有幫助。

七. es 附錄
es術語介紹:
cluster:

代 表一個叢集,叢集中有多個節點,其中有一個為主節點。這個主節點是可以通過選舉產生的。注意,主從節點是對於叢集內部來說的。es的一個概念就是去中心 化,字面上理解就是無中心節點,這是對於叢集外部來說的,因為從外部來看es叢集,在邏輯上是個整體,你與任何一個節點的通訊和與整個es叢集通訊是等價 的。
shards

代表索引分片。es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引拆分成多個,分佈到不同的節點上。構成分散式搜尋。分片的數量只能在索引建立前指定,並且索引建立後不能更改。
replicas

代表索引副本,es可以設定多個索引的副本。副本的作用,一是提高系統的容錯性,當某個節點的某個分片損壞或丟失時可以從副本中恢復,二是提高es的查詢效率,es會自動對搜尋請求進行負載均衡。
recovery

代表資料恢復或叫資料重新分佈,es在有節點加入或退出時會根據機器的負載對索引分片進行重新分配,掛掉的節點重新啟動時也會進行資料恢復。
river

代表es的一個數據源,也是其他儲存方式(如:資料庫)同步資料到es的一個方法。它是以外掛方式存在的一個es服務,通過讀取river中的資料並把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。
gateway

代 表es索引快照的儲存方式。es預設是先把索引存放到記憶體中,當記憶體滿了時再持久化到本地硬碟。gateway對索引快照進行儲存,當這個es叢集關閉再 重新啟動時,就會從gateway中讀取索引備份資料。es支援多種型別的gateway,有本地檔案系統(預設),分散式檔案系統,Hadoop的 HDFS和amazon的s3雲端儲存服務。
discovery.zen

代表es的自動發現節點機制。es是一個基於p2p的系統,它先通過廣播尋找存在的節點,再通過多播協議來進行節點之間的通訊,同時也支援點對點的互動。
Transport

代表es內部節點或叢集與客戶端的互動方式。預設內部是使用tcp協議進行互動,同時它支援http協議(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協議(通過外掛方式整合)。

相關推薦

.net Elasticsearch 學習入門筆記

一. es安裝相關1.elasticsearch安裝  執行http://localhost:9200/2.head外掛3.bigdesk外掛安裝(安裝細節百度:windows elasticsearch 安裝,有詳細內容) 二. es外掛相關http://www.searchtech.pro/elas

Spring MVC學習入門筆記

分享圖片 快捷 png epo 為什麽 學習 -c ava 報錯 使用Spring步驟 添加依賴 創建xml文件 配置(需要被管理的類)bean 實例化上下文類 GetBean對象 使用idea新建一個maven項目,在pom.xml中添加依賴: <depe

.net core MVC 入門筆記記錄

http 筆記 delete public 比較 key值 attribute memory 對象   作為開發者,永遠不能停下學習的腳步。.net core mvc似乎跟.net mvc在使用層面上有一些相同,我本著在學習.net core mvc的同時也復習一下.net

python3.6。爬蟲學習入門筆記

爬蟲 前提知識: URL HTTP協議 web前端,html css js ajax re,Xpath XML 爬蟲的定義 百度上詳細的介紹 三大步驟:

mangoDb 學習入門筆記

  目錄 為什麼選擇mangoDb 連線方法: 基本操作方法 插入(增) 更新和查詢(改) 刪除操作 索引   為什麼選擇mangoDb     連線方法: 基

深度學習入門筆記(二)————線性神經網路解決異或問題(程式碼)

首先梳理一下思路 輸入為1,0。00異或為0,01異或為1,10異或為1,11異或為0.所以輸出為2類如下圖可知,需要兩條線劃分。 Madaline用間接地辦法解決。多個線性函式進行劃分,然後對各個神經元的輸出做邏輯運算。如圖,用兩條直線實現了異或的劃分。   線

深度學習入門筆記系列 ( 二 )——基於 tensorflow 的一些深度學習基礎知識

本系列將分為 8 篇 。今天是第二篇 。主要講講 TensorFlow 框架的特點和此係列筆記中涉及到的入門概念 。 1.Tensor 、Flow 、Session 、Graphs TensorFlow 從單詞上可以分成 Tensor 和 Flow 兩個單詞 。Ten

深度學習入門筆記系列(三)——感知器模型和 tensorboard 的使用方法

本系列將分為 8 篇 。今天是第三篇 。主要講講感知器模型和 tensorboard 的基本使用方法 。 1. 感知器模型 因為小詹之前寫過一篇感知器模型的介紹 ,這裡就不贅述了 。有需要鞏固的點選如下連結跳轉即可 : 2. tensorboard Tenso

機器學習入門筆記

本系類筆記主要是學習莫煩的機器學習視訊而寫的,以防遺忘. 一.機器學習型別 ① 監督學習(有資料,有標籤)    例如:給計算機看貓和狗的照片從而讓計算機分辨出貓狗.以及神經網路 ② 非監督學習(有資料,無標籤)   例如:不告訴計算機誰是貓誰是狗,

Net Core 學習入門(六)----------配置mongoDB

1,在官網處下載最新安裝包,安裝到windows。2,使用vs新建一個專案,並使用nugut匯入mongoDb的開發包。3,配置類     配置是按照官網的教程配的,操作類是網上其他大神的,using CoreMvc.Common; using MongoDB.Driver;

程式設計師的機器學習入門筆記(七):推薦系統入門介紹

介紹 背景 隨著網際網路行業的井噴式發展,獲取資訊的方式越來越多,人們從主動獲取資訊逐漸變成了被動接受資訊,資訊量也在以幾何倍數式爆發增長。舉一個例子,PC時代用google reader,常常有上千條未讀部落格更新;如今的微信公眾號,也有大量的紅點未閱

Django學習入門筆記(三)

模型部分講解   本文是自己學習做的筆記,如有雷同純屬巧合,如有問題請指出,謝謝! 基於環境Ubuntu16.04 python3.6 Django 2.07 [儲備知識] ORM(物件object-關係relationship-對映map) ORM的作用-&g

深度學習——入門筆記(3)

此處是硬著頭皮跳過得(反向傳播,因為我發現我看的懂每一句話,每一個推導,但是去細想很多東西卻有種轟然崩塌得感覺,所以繼續進行) 改善神經網路的方式:(其實就是將結果優化的方式) 1.交叉成本熵函式 錯誤的定義是無意義的,因為人類是從錯誤中學習的,但是根據常識,人犯的錯誤越大,學習效果越好

深度學習——入門筆記(1)

最近有個三天小長假,也沒有什麼繁瑣的事兒,正好用來學點東西。自己根據自己的特點,找了本實踐和理論結合的深度學習的書,也不想那麼多,看完再說。 以前喜歡做筆記,但是發現找起來太麻煩,所以這次嘗試著些部落格吧。 書籍連結:http://neuralnetworksanddeeplearning.

Udacity機器學習入門筆記——自選演算法 隨機森林

自選三個演算法之一:隨機森林引數調整學習(Google自帶翻譯ε=(´ο`*))))在ud120-projects\choose_your_own\your_algorithm.py中新增以下程式碼from sklearn.ensemble import RandomFore

Spark MLlib 學習入門筆記

RDD(Resilient Distributed Datasets)分散式彈性資料集,將資料分

深度學習入門筆記

之前研討會各種聽老闆和師兄談論deep learning的話題,自己也就聽一聽,這段時間出於瞭解論文的目的仔細研究了一下,感覺內部挺複雜的,不過若只是需要了解原理,其實還比較簡單。 首先推薦一

500多頁的機器學習入門筆記,下載超5萬次,都講了些什麼?

導讀:今年 4 月,樑勁在百度雲盤上傳了一份自己整理的學習筆記——《機器學習——從入門到放棄》。

深度增強學習入門筆記(一)

知乎專欄智慧單元的學習筆記,僅為自己學習所用,侵刪。 從OpenAI看深度學習研究前沿 OpenAI的三個主要研究方向 1. 深度生成模型 Deep Generative Model 通過學習現有的資料生成新的資料。 相關研究

Net Core 學習入門(五)----------使用EF連結資料庫

由於netcore2.0集成了Ef,所以我們使用Ef的時候配置一下就行了。1,配置資料庫連結appsetting.json{ "Logging": { "IncludeScopes": false, "LogLevel": {