ElasticSearch入门 第四篇:使用C#添加和更新文档
2017-10-19 10:16
585 查看
这是ElasticSearch 2.4 版本系列的第四篇:
ElasticSearch入门 第一篇:Windows下安装ElasticSearch
ElasticSearch入门 第二篇:集群配置
ElasticSearch入门 第三篇:索引
ElasticSearch入门 第四篇:使用C#添加和更新文档
ElasticSearch入门 第五篇:使用C#查询文档
ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套
ElasticSearch入门 第七篇:分析器
ElasticSearch入门 第八篇:存储
ElasticSearch入门 第九篇:实现正则表达式查询的思路
在ElasticSearch引擎中进行全文搜索是一件非常酷炫的事,而创建索引是最重要的事,必须要精心设计,建议使用head插件创建索引的映射(Mapping),而对索引文档数据的日常更新,可以使用C#客户端程序,按照计划自动进行数据的同步和更新。
对于一个数据库开发,很久没有写过C#代码,dot net菜鸟一个,本文简单分享了使用ElasticSearch的.net客户端驱动程序向索引中添加文档的代码片段,详细信息,请参考官方手册:Elasticsearch.Net and NEST: the .NET clients [5.x] » Introduction
一,ElasticSearch的.net客户端驱动程序
ElasticSearch官方网站提供了两个.net客户端驱动程序,其中Elasticsearch.Net是一个非常底层且灵活的客户端驱动程序,用户需要手动创建请求(Request)和响应(Response);而NEST是一个高层的客户端,其内部使用的依然是Elasticsearch.Net驱动程序,NEST拥有查询DSL(领域特定语言),能够映射所有请求和响应对象,使用起来比较方便。不同版本的NEST驱动程序,其提供的接口变化很大,在熟悉Nest之后,可以使用Elasticsearch.Net驱动程序来编写自己的代码,免受更新之苦。
首先,下载ElastiSearch的.net客户端驱动程序,打开VS的工具(Tools)菜单,通过NuGet包管理器控制台,输入命令安装NEST:
安装之后,系统引用三个DLL文件,楼主安装的驱动程序版本分别是:
Elasticsearch.Net.dll (版本 5.0.0.0)
Nest.dll (版本 5.0.0.0)
Newtonsoft.Json.dll (版本 9.0.0.0)
二,NEST驱动程序的简单[b]使用[/b]
1,连接到ElasticSearch引擎服务器
注意,默认索引的名称必须小写,建议将索引名,文档类型名称,和字段名称都小写。
2,创建数据模型
注意,模型的字段名和创建的索引映射中的字段保持一致,推荐都使用小写字母。Nest驱动程序提供了模型属性,读者可以自行尝试。
3,更新文档
NEST提供两种更新文档的方式,逐条更新和批量更新,函数PopulateIndex用于逐条更新索引,函数BulkPopulateIndex用于批量更新索引;
注意,在更新索引时,高亮显示的代码指定了索引的元字段_id为meetupevent实体的主键eventid;
4,执行批量更新操作
如果更新的数据量十分庞大,建议,首先对数据源分页,分batch更新ElasticSearch的索引。ElasticSearch在批量索引文档时,如果一批文档数量过大,会导致数据丢失,建议每次索引1000个文档。
5,总结NEST驱动程序的使用
使用以下三段代码连接NEST客户端:
使用客户端的Index方法更新/添加单个文档:
使用客户端的IndexMany函数更新/添加多个文档:
使用客户端的Bulk方法批量更新文档,需要根据实体列表List构造一个BulkRequest参数:
参考文档:
NEST使用指南
elasticsearch.net search入门使用指南中文版
.net ElasticSearch
ElasticSearch入门 第一篇:Windows下安装ElasticSearch
ElasticSearch入门 第二篇:集群配置
ElasticSearch入门 第三篇:索引
ElasticSearch入门 第四篇:使用C#添加和更新文档
ElasticSearch入门 第五篇:使用C#查询文档
ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套
ElasticSearch入门 第七篇:分析器
ElasticSearch入门 第八篇:存储
ElasticSearch入门 第九篇:实现正则表达式查询的思路
在ElasticSearch引擎中进行全文搜索是一件非常酷炫的事,而创建索引是最重要的事,必须要精心设计,建议使用head插件创建索引的映射(Mapping),而对索引文档数据的日常更新,可以使用C#客户端程序,按照计划自动进行数据的同步和更新。
对于一个数据库开发,很久没有写过C#代码,dot net菜鸟一个,本文简单分享了使用ElasticSearch的.net客户端驱动程序向索引中添加文档的代码片段,详细信息,请参考官方手册:Elasticsearch.Net and NEST: the .NET clients [5.x] » Introduction
一,ElasticSearch的.net客户端驱动程序
ElasticSearch官方网站提供了两个.net客户端驱动程序,其中Elasticsearch.Net是一个非常底层且灵活的客户端驱动程序,用户需要手动创建请求(Request)和响应(Response);而NEST是一个高层的客户端,其内部使用的依然是Elasticsearch.Net驱动程序,NEST拥有查询DSL(领域特定语言),能够映射所有请求和响应对象,使用起来比较方便。不同版本的NEST驱动程序,其提供的接口变化很大,在熟悉Nest之后,可以使用Elasticsearch.Net驱动程序来编写自己的代码,免受更新之苦。
首先,下载ElastiSearch的.net客户端驱动程序,打开VS的工具(Tools)菜单,通过NuGet包管理器控制台,输入命令安装NEST:
PM> Install-Package NEST
安装之后,系统引用三个DLL文件,楼主安装的驱动程序版本分别是:
Elasticsearch.Net.dll (版本 5.0.0.0)
Nest.dll (版本 5.0.0.0)
Newtonsoft.Json.dll (版本 9.0.0.0)
二,NEST驱动程序的简单[b]使用[/b]
1,连接到ElasticSearch引擎服务器
注意,默认索引的名称必须小写,建议将索引名,文档类型名称,和字段名称都小写。
using Nest; public static class Setting { public static string strConnectionString=@"http://localhost:9200"; public static Uri Node { get { return new Uri(strConnectionString); } } public static ConnectionSettings ConnectionSettings { get { return new ConnectionSettings(Node).DefaultIndex("default"); } } }
2,创建数据模型
注意,模型的字段名和创建的索引映射中的字段保持一致,推荐都使用小写字母。Nest驱动程序提供了模型属性,读者可以自行尝试。
public class MeetupEvents { public long eventid { get; set; } public string orignalid { get; set; } public string eventname { get; set; } public string description { get; set; } }
3,更新文档
NEST提供两种更新文档的方式,逐条更新和批量更新,函数PopulateIndex用于逐条更新索引,函数BulkPopulateIndex用于批量更新索引;
注意,在更新索引时,高亮显示的代码指定了索引的元字段_id为meetupevent实体的主键eventid;
using Nest; public class ESProvider { public static ElasticClient client = new ElasticClient(Setting.ConnectionSettings); public static string strIndexName = @"meetup".ToLower(); public static string strDocType = "events".ToLower(); public bool PopulateIndex(MeetupEvents meetupevent) { var index = client.Index(meetupevent,i=>i.Index(strIndexName).Type(strDocType).Id(meetupevent.eventid)); return index.Created; } public bool BulkPopulateIndex(List<MeetupEvents> posts) { var bulkRequest = new BulkRequest(strIndexName,strDocType) { Operations = new List<IBulkOperation>() }; var idxops = posts.Select(o => new BulkIndexOperation<MeetupEvents>(o) { Id=o.eventid}).Cast<IBulkOperation>().ToList(); bulkRequest.Operations = idxops; var response = client.Bulk(bulkRequest); return response.IsValid; } }
4,执行批量更新操作
如果更新的数据量十分庞大,建议,首先对数据源分页,分batch更新ElasticSearch的索引。ElasticSearch在批量索引文档时,如果一批文档数量过大,会导致数据丢失,建议每次索引1000个文档。
ESProvider es = new ESProvider(); List<MeetupEvents> pbs = new List<MeetupEvents>(); foreach (DataRow dr in MeetupEventsTable.Rows) { MeetupEvents pb = new MeetupEvents(); pb.eventid = long.Parse(dr["EventID"].ToString()); pb.orignalid = dr["OriginalID"].ToString(); pb.eventname = dr["EventName"].ToString(); pb.description = dr["Description"].ToString(); pbs.Add(pb); } es.BulkPopulateIndex(pbs);
5,总结NEST驱动程序的使用
使用以下三段代码连接NEST客户端:
var node = new Uri("http://myserver:9200"); var settings = new ConnectionSettings(node).DefaultIndex("default"); var client = new ElasticClient(settings);
使用客户端的Index方法更新/添加单个文档:
Client.Index(student);
使用客户端的IndexMany函数更新/添加多个文档:
var list = new List<Student>(); client.IndexMany<Student>(list);
使用客户端的Bulk方法批量更新文档,需要根据实体列表List构造一个BulkRequest参数:
client.Bulk(bulkRequest);
参考文档:
NEST使用指南
elasticsearch.net search入门使用指南中文版
.net ElasticSearch
相关文章推荐
- ElasticSearch入门 第四篇:使用C#添加和更新文档
- ElasticSearch入门 第四篇:使用C#添加和更新文档
- ElasticSearch入门 第五篇:使用C#查询文档
- ElasticSearch入门 第五篇:使用C#查询文档
- ES使用C#添加和更新文档
- 如何使用C#向Word文档中添加表格和嵌套表格
- 开发人员在使用Aspose.Pdf for .NET时如何用C#和VB两种代码添加附件到PDF文档?
- C#新手入门代码 VS2015使用技巧 dll之新建类库,添加类库至现有项目,实例化类库中的类
- Neo4j 第四篇:使用C#更新和查询Neo4j
- Neo4j 第四篇:使用C#更新和查询Neo4j
- C#使用Ado.Net更新和添加数据到Excel表格的方法
- 在 Java 应用程序中使用 Elasticsearch: 高性能 RESTful 搜索引擎和文档存储快速入门指南
- 使用C#给PDF文档添加注释的实现代码
- 在 Java 应用程序中使用 Elasticsearch: 高性能 RESTful 搜索引擎和文档存储快速入门指南
- C#ADO连接修改Paradox表时“操作必须使用一个可更新的查询”错误的处理办法
- 在C#中使用属性控件添加属性窗口
- C# 中用户控件中添加事件和使用
- 使用 DataAdapter 和 DataSet 更新数据库 [C#]
- .NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)
- 使用C#自动生成Word2003文档(通过操作COM组件实现)-转载