ElasticSearch入门 第四篇:使用C#添加和更新文档

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介:

这是ElasticSearch 2.4 版本系列的第四篇:

 

在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驱动程序的简单使用

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







本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/5160329.html,如需转载请自行联系原作者

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2月前
|
存储 编译器 数据处理
C#基础入门之数据类型
C#基础入门之数据类型
|
4月前
|
安全 Linux 开发工具
Elasticsearch 搜索入门技术之一
Elasticsearch 搜索入门技术之一
228 1
|
4月前
Elasticsearch之RestClient查询文档
Elasticsearch之RestClient查询文档
139 1
|
6天前
|
开发框架 IDE .NET
c#入门必看
c#入门必看
10 0
|
7天前
|
存储 安全 数据处理
Elasticsearch 为什么会产生文档版本冲突?如何避免?
Elasticsearch 为什么会产生文档版本冲突?如何避免?
16 0
|
7天前
|
安全 Python
Elasticsearch 删除重复文档实现方式,你知道几个?
Elasticsearch 删除重复文档实现方式,你知道几个?
9 0
|
24天前
|
IDE 程序员 C#
C#编程入门:从零开始的旅程
【4月更文挑战第20天】本文引导初学者入门C#编程,从环境搭建开始,推荐使用Visual Studio Community版作为IDE。接着,通过编写&quot;Hello, World!&quot;程序,介绍基本语法,包括数据类型、运算符和表达式。文章还涉及控制结构、函数和方法,以及面向对象编程概念。通过学习,读者将对C#有初步了解,并激发进一步探索编程世界的兴趣。
|
3月前
|
存储 关系型数据库 MySQL
ElasticSearch 入门
【2月更文挑战第7天】ElasticSearch 入门 简介 ElasticSearch 的基本概念 ElasticSearch 的查询流程 ElasticSearch 的更新流程
40 2
|
3月前
|
存储 自然语言处理 搜索推荐
ElasticSearch入门篇
ElasticSearch入门篇
|
3月前
|
开发框架 .NET 程序员
C#/.NET该如何自学入门?
C#/.NET该如何自学入门?