.net Elasticsearch入門執行個體詳解

來源:互聯網
上載者:User
一. es安裝相關
1.elasticsearch安裝
運行http://localhost:9200/
2.head外掛程式
3.bigdesk外掛程式安裝
(安裝細節百度:windows elasticsearch 安裝,有詳細內容)

二. es外掛程式相關
www.searchtech.pro/elasticsearch-plugins (es 外掛程式大全)
(ik 項目)
(ES的外掛程式 監控 節點狀態 , 也可以調試你的ES查詢)
(2.1.1 + 1.6ik 還有拼音 和其他分詞器 整合好了)
(類似head的外掛程式)
www.elastic.co/downloads/marvel (監控ES健康狀態)
konf外掛程式 (據說能看叢集負載)

三.es C# 用戶端樣本

1. 包下載elasticsearch.net,nest 組件。
nest組件會依賴下載elasticsearch組件。
使用文檔:
備忘:.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 = "sales@historichousehotels.com",                    Lastname = "t Boterhuis 1",                    Chains = new string[]{ "a","b","c" },                },                new Person()                {                    Id = "6",                    Firstname = "Aberdeen #110",                    Lastname = "sales@historichousehotels.com",                    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,有本地檔案系統(預設),Distributed File System,Hadoop的 HDFS和amazon的s3雲端儲存體服務。
discovery.zen
代表es的自動探索節點機制。es是一個基於p2p的系統,它先通過廣播尋找存在的節點,再通過多播協議來進行節點之間的通訊,同時也支援點對點的互動。
Transport
代表es內部節點或叢集與用戶端的互動方式。預設內部是使用tcp協議進行互動,同時它支援http協議(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協議(通過外掛程式方式整合)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.