.net Elasticsearch 學習入門筆記

来源:http://www.cnblogs.com/a-du/archive/2017/06/07/6958614.html
-Advertisement-
Play Games

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


一. 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等的傳輸協議(通過插件方式集成)。


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

-Advertisement-
Play Games
更多相關文章
  • 轉載請註明:http://www.cnblogs.com/igoslly/p/6947225.html 下一章是關於ListFragment的內容,首先先介紹ListView的相關配置,理解ListFragment也相較容易。 在fznpcy專欄:http://blog.csdn.net/fznpc ...
  • 目錄 零、主要參考網頁 一、概述 二、分區類型以及創建方式 三、分區表的管理 三、分區表的管理 四、獲取分區表信息 四、獲取分區表信息 五、分區的局限與分表 零、主要參考網頁 http://www.2cto.com/database/201503/380348.html【mysql分表和表分區詳解】 ...
  • 目錄 零、參考網頁 一、概述 二、語法 三、外鍵 四、索引 零、參考網頁 http://zhidao.baidu.com/link?url=ik8ZtrHL2qfZMgQStSFEcP2ORechkwBzbxBQjMQ15SoCV11-rRv5buPIPLZBZu570-YWRoAFsqANBiII ...
  • 卸載MariaDB CentOS7預設安裝MariaDB而不是MySQL,而且yum伺服器上也移除了MySQL相關的軟體包。因為MariaDB和MySQL可能會衝突,故先卸載MariaDB。 1、安裝新版mysql之前,我們需要將系統自帶的mariadb-lib卸載 2、到mysql的官網下載最新版 ...
  • 恢復內容開始 [20170603]12c Top Frequency histogram.txt--//個人對直方圖瞭解很少,以前2種直方圖類型對於目前的許多應用來講已經足夠,或者講遇到的問題很少.--//抽一點點時間,簡單探究12c Top Frequency histogram.--//以前的頻 ...
  • INFORMATION_SCHEMA PROFILING "Table" PROFILING表提供了語句分析信息。 其內容對應於SHOW PROFILES和SHOW PROFILE語句生成的信息. INFORMATION_SCHEMA Name|SHOW Name| Notes |: |: QUER ...
  • 下麵簡單介紹一下如何在Red Hat Enterprise Linux上一步一步創建一個SQL Server AG(Always On Availability Group),以及配置過程中遇到的坑的填充方法。 之前發表過一篇類似的文章是Configure Always On Availabilit ...
  • 中間實在忙啊,隔了幾天,終於有點時間,本來以為寫博客很簡單,不過現在感覺怎麼把意思表達清楚真是件難事啊,所以,寫的不好,園友們不要介意啊。 話說,上回我打算開發游戲,考慮了4種技術,後來我發現無論哪種技術應該是都能實現,區別大概就是性能以及占用的資源吧,所以,我後來實現用的是wpf。當時在網上搜索了 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...