首页 > 其他分享 >.net Elasticsearch 学习入门笔记

.net Elasticsearch 学习入门笔记

时间:2022-11-11 21:05:03浏览次数:45  
标签:入门 索引 Elasticsearch var new net Id es string

.net Elasticsearch (es) 学习入门笔记及简要总结。

一. 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,var,new,net,Id,es,string
From: https://blog.51cto.com/chejiangyi/5845346

相关文章

  • .net 大型分布式电子商务架构说明
    构建具备高可用,高扩展性,高性能,能承载高并发,大流量的.net分布式电子商务平台的架构说明。其中包含基础框架沉淀,分库分表,基础服务架构(消息队列,任务调度......
  • ElasticSearch 7中获取某类型为List<String>的字段的元素个数
    在ElasticSearch中,如果我们设置某字段的类型为keyword,但是我们实际存进去的是一个形如List<String>的值时,这时候Es也是可以保存成功,存储后的数据类似于这样{"ids":[......
  • 篇(3)-Asp.Net Core入门实战-数据库配置说明
    入门实战-创建数据库和安装NuGet软件包注意,我们用到asp.netcore新功能中的所谓CodeFirst或者DbFirst,我们先不管这功能,为了快速上手简单功能,我计划使用EF(微软新的数据......
  • 【DL经典论文精读】ResNet
    Abstract利用残差学习架构释放深度152层深度是VGG的8倍,且复杂度更低ImageNet上的错误率3.57%在ILSVRC和2015COCO竞赛,在多项任务拿到第一 3.1Introductio......
  • 【DL经典论文精读笔记】AlexNet
    1.1引言1.2数据集就是ImageNet,当时计算机视觉最大的数据集1.3结构  采用双GPU结构实现,并行处理图像,2-3,5-全连接部分中间还将特征图共享最后全连接层输出的4096......
  • docker自建elasticsearch镜像
    一、dockerhub中没有elasticsearch:6.2.4版本的镜像(你敢信!!),没有办法只有自己弄了二、参考官网镜像的构建过程(尼玛看不懂)  备注:看不懂呀,不过有些过......
  • 紧急通知,Citrix Netscaler 13.1.33.52之前版本存在的安全隐患问题
    一、前言:在CitrixGateway和CitrixADC中发现了下面列出的漏洞。请注意,只有作为网关运行的设备(SSLVPN、ICA代理、CVPN、RDP代理)才会受到第一个问题的影响,该问题被评......
  • CentOS 7 安装 ElasticSearch 8.5
    参考:InstallElasticsearchfromarchiveonLinuxorMacOS|ElasticsearchGuide[8.5]|ElasticInstallKibanafromarchiveonLinuxormacOS|KibanaGuide[......
  • 工业控制之SCADA组态软件入门指南
    什么是SCADA?SCADA 代表 监督控制和数据采集系统。SCADA系统是一种基于软件的应用程序,在工业制造领域,用于控制一系列硬件组件。此外,正如首字母缩略词所暗示的那样,SCADA系......
  • ASP.Net Core Web 在IIS下的发布流程
    1.新建项目,选择Asp.NETWeb应用程序2.选择Web应用程序(模型视图控制器)3.鼠标右键项目,选择【发布】4.选择【IIS、FTP等】5.发布方法选择【文件......