一. 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ò)插件方式集成)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注