国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

.netElasticsearch學(xué)習(xí)入門(mén)筆記

2019-11-14 13:31:27
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一. es安裝相關(guān)
1.elasticsearch安裝
  運(yùn)行http://localhost:9200/
2.head插件
3.bigdesk插件安裝
(安裝細(xì)節(jié)百度:windows elasticsearch 安裝,有詳細(xì)內(nèi)容)

二. es插件相關(guān)
http://www.searchtech.PRo/elasticsearch-plugins (es 插件大全)
https://github.com/medcl/elasticsearch-analysis-ik (ik 項(xiàng)目)
https://github.com/lmenezes/elasticsearch-kopf (ES的插件  監(jiān)控 節(jié)點(diǎn)狀態(tài) , 也可以調(diào)試你的ES查詢(xún))
https://github.com/medcl/elasticsearch-rtf/tree/master (2.1.1 + 1.6ik  還有拼音  和其他分詞器 集成好了)
https://github.com/lmenezes/elasticsearch-kopf (類(lèi)似head的插件)
https://www.elastic.co/downloads/marvel (監(jiān)控ES健康狀態(tài))
konf插件 (據(jù)說(shuō)能看集群負(fù)載)

三.es C# 客戶(hù)端示例

1. 包下載elasticsearch.net,nest 組件。
   nest組件會(huì)依賴(lài)下載elasticsearch組件。
   使用文檔:http://nest.azurewebsites.net/
   備注:.net 使用es的相對(duì)少一些,es版本更新也很快,很多使用也都是靠自己揣摩。多交流,多分享。
2. 創(chuàng)建連接客戶(hù)端
     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. 創(chuàng)建索引模型(索引結(jié)構(gòu))
[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示例,更詳細(xì)些,可下載附件。
4. 索引內(nèi)容(創(chuàng)建索引)
  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. 簡(jiǎn)單搜索示例
  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. 總結(jié)
以上示例代碼,簡(jiǎn)單的應(yīng)用已經(jīng)足夠用。其他的就是高亮和分組??梢钥次臋n。

四. es 集群
 es 默認(rèn)是一個(gè)集群,相對(duì)solr云來(lái)說(shuō)配置更簡(jiǎn)單,搭建更方便些。但是更多還是要根據(jù)業(yè)務(wù)進(jìn)行自己的集群設(shè)計(jì)還是好費(fèi)很多時(shí)間,很多精力。(上手容易,用好難)

五. es 與solr 對(duì)比
個(gè)人目前了解的:
原來(lái)solr資料比較多,現(xiàn)在貌似es的資料更多一點(diǎn)。solr是官方英文pdf,es也是英文的。
原來(lái)solr還有中文書(shū)籍,現(xiàn)在貌似沒(méi)有了。es 目前還有幾本書(shū)籍,但是講的es版本略有老舊。
solr上手相對(duì)es略微難些。
(n年前,我用的是solr,那時(shí)候還沒(méi)有solrcloud;es還沒(méi)有出來(lái),那時(shí)候solr資料反而多。個(gè)人也實(shí)現(xiàn)了自己的solr集群方案。其他的功能上的對(duì)比,還是百度,不重復(fù)。)

六. 如果es客戶(hù)端調(diào)試請(qǐng)求
建議下載HTTPAnalyzer之類(lèi)的tcp攔截工具。這樣可以攔截驗(yàn)證sdk出來(lái)的請(qǐng)求連接,對(duì)比資料和書(shū)籍看下哪些參數(shù)寫(xiě)錯(cuò)了,對(duì)調(diào)試很有幫助。

七. es 附錄
es術(shù)語(yǔ)介紹:
cluster:

代表一個(gè)集群,集群中有多個(gè)節(jié)點(diǎn),其中有一個(gè)為主節(jié)點(diǎn)。這個(gè)主節(jié)點(diǎn)是可以通過(guò)選舉產(chǎn)生的。注意,主從節(jié)點(diǎn)是對(duì)于集群內(nèi)部來(lái)說(shuō)的。es的一個(gè)概念就是去中心化,字面上理解就是無(wú)中心節(jié)點(diǎn),這是對(duì)于集群外部來(lái)說(shuō)的,因?yàn)閺耐獠縼?lái)看es集群,在邏輯上是個(gè)整體,你與任何一個(gè)節(jié)點(diǎn)的通信和與整個(gè)es集群通信是等價(jià)的。
shards

代表索引分片。es可以把一個(gè)完整的索引分成多個(gè)分片,這樣的好處是可以把一個(gè)大的索引拆分成多個(gè),分布到不同的節(jié)點(diǎn)上。構(gòu)成分布式搜索。分片的數(shù)量只能在索引創(chuàng)建前指定,并且索引創(chuàng)建后不能更改。
replicas

代表索引副本,es可以設(shè)置多個(gè)索引的副本。副本的作用,一是提高系統(tǒng)的容錯(cuò)性,當(dāng)某個(gè)節(jié)點(diǎn)的某個(gè)分片損壞或丟失時(shí)可以從副本中恢復(fù),二是提高es的查詢(xún)效率,es會(huì)自動(dòng)對(duì)搜索請(qǐng)求進(jìn)行負(fù)載均衡。
recovery

代表數(shù)據(jù)恢復(fù)或叫數(shù)據(jù)重新分布,es在有節(jié)點(diǎn)加入或退出時(shí)會(huì)根據(jù)機(jī)器的負(fù)載對(duì)索引分片進(jìn)行重新分配,掛掉的節(jié)點(diǎn)重新啟動(dòng)時(shí)也會(huì)進(jìn)行數(shù)據(jù)恢復(fù)。
river

代表es的一個(gè)數(shù)據(jù)源,也是其他存儲(chǔ)方式(如:數(shù)據(jù)庫(kù))同步數(shù)據(jù)到es的一個(gè)方法。它是以插件方式存在的一個(gè)es服務(wù),通過(guò)讀取river中的數(shù)據(jù)并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。
gateway

代表es索引快照的存儲(chǔ)方式。es默認(rèn)是先把索引存放到內(nèi)存中,當(dāng)內(nèi)存滿(mǎn)了時(shí)再持久化到本地硬盤(pán)。gateway對(duì)索引快照進(jìn)行存儲(chǔ),當(dāng)這個(gè)es集群關(guān)閉再重新啟動(dòng)時(shí),就會(huì)從gateway中讀取索引備份數(shù)據(jù)。es支持多種類(lèi)型的gateway,有本地文件系統(tǒng)(默認(rèn)),分布式文件系統(tǒng),Hadoop的HDFS和amazon的s3云存儲(chǔ)服務(wù)。
discovery.zen

代表es的自動(dòng)發(fā)現(xiàn)節(jié)點(diǎn)機(jī)制。es是一個(gè)基于p2p的系統(tǒng),它先通過(guò)廣播尋找存在的節(jié)點(diǎn),再通過(guò)多播協(xié)議來(lái)進(jìn)行節(jié)點(diǎn)之間的通信,同時(shí)也支持點(diǎn)對(duì)點(diǎn)的交互。
Transport

代表es內(nèi)部節(jié)點(diǎn)或集群與客戶(hù)端的交互方式。默認(rèn)內(nèi)部是使用tcp協(xié)議進(jìn)行交互,同時(shí)它支持http協(xié)議(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協(xié)議(通過(guò)插件方式集成)。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 高邮市| 洛阳市| 康乐县| 江北区| 道真| 平原县| 井研县| 离岛区| 镇沅| 永丰县| 尤溪县| 若羌县| 连城县| 肥城市| 吉安县| 武清区| 武清区| 景德镇市| 通州区| 黄骅市| 衡阳县| 崇义县| 大荔县| 龙泉市| 伊宁县| 嘉义市| 安阳县| 庄浪县| 天津市| 靖州| 伊通| 湾仔区| 庆云县| 塔河县| 鹤山市| 汽车| 瓮安县| 张家口市| 玉门市| 德昌县| 玉门市|