ElasticSearch使用C#操作文档
一、ElasticSearch的.net客户端驱动程序
ElasticSearch官方网站提供了两个.net客户端驱动程序,其中Elasticsearch.Net是一个非常底层且灵活的客户端驱动程序,用户需要手动创建请求(Request)和响应(Response);而NEST是一个高层的客户端,其内部使用的依然是Elasticsearch.Net驱动程序,NEST拥有查询DSL(领域特定语言),能够映射所有请求和响应对象,使用起来比较方便。不同版本的NEST驱动程序,其提供的接口变化很大,在熟悉Nest之后,可以使用Elasticsearch.Net驱动程序来编写自己的代码,免受更新之苦。
二、NEST驱动程序的简单使用
参考:github.com/elastic/elasticsearch-net
1、连接到ElasticSearch引擎服务器
注意,默认索引的名称必须小写,建议将索引名,文档类型名称,和字段名称都小写。
可以通过单个节点或者指定多个节点使用连接池链接到Elasticsearch集群,使用连接池要比单个节点链接到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");
}
}
}
通过连接池链接:
var nodes = new Uri[]
{
new Uri("http://myserver1:9200"),
new Uri("http://myserver2:9200"),
new Uri("http://myserver3:9200")
}; var pool = new StaticConnectionPool(nodes);
var settings = new ConnectionSettings(pool);
var client = new ElasticClient(settings);
2、索引创建、删除
为了知道请求需要操作哪个索引,Elasticsearch API期望收到一个或多个索引名称作为请求的一部分。
/// <summary>
/// 创建索引
/// </summary>
/// <param name="indexName"></param>
public static void CreateIndex(string indexName)
{
var descriptor = new CreateIndexDescriptor(indexName)
.Settings(s => s.NumberOfShards().NumberOfReplicas());//该索引的分片数为6、副本数为2。
var result = client.CreateIndex(descriptor);
if (result != null && result.ApiCall != null)
{
var callResult = result.ApiCall;
Console.WriteLine($"创建索引{indexName}返回的结果:\r\n {JsonConvert.SerializeObject(result)}");
if (callResult.Success)
{
Console.WriteLine("创建索引成功!");
} else
{
Console.WriteLine($"创建索引失败!\r\n {result.ServerError}");
}
}
} /// <summary>
/// 删除索引
/// </summary>
/// <param name="indexName"></param>
public static void DeleteIndex(string indexName)
{
var descriptor = new DeleteIndexDescriptor(indexName).Index(indexName);
var result = client.DeleteIndex(descriptor);
if (result != null && result.ApiCall != null)
{
var callResult = result.ApiCall;
Console.WriteLine($"删除索引{indexName}返回的结果:\r\n {JsonConvert.SerializeObject(result)}");
if (callResult.Success)
{
Console.WriteLine("删除索引成功!");
}
else
{
Console.WriteLine($"删除索引失败!\r\n {result.ServerError}");
}
}
}
//删除指定索引所在节点下的所有索引
var descriptor = new DeleteIndexDescriptor("db_student").AllIndices();
3、添加数据(类型和文档)
/// <summary>
/// 直接添加数据,通过索引
/// </summary>
public static void IndexDocument()
{
var student = new Student
{
Id = ,
User = "kimchyTwo",
PostDate = new DateTime(, , ),
Message = "Trying out NEST, so far so good?"
};
//添加/更新 单一文档
//var response = client.Index(student, idx => idx.Index("studentdb"));
//or specify index via settings.DefaultIndex("mytweetindex");
var response = client.IndexAsync(student, idx => idx.Index("studentdb"));
Console.WriteLine($"添加数据返回的结果: \r\n { JsonConvert.SerializeObject(response)}"); //批量添加/更新文档
//var list = new List<Student>();
//client.IndexMany<Student>(list);
}
4、获取数据
NEST提供了支持Lambda链式query DLS(领域特定语言)方式
/// <summary>
/// 获取数据
/// </summary>
public static void GetDocument()
{
var response = client.Get<Student>(, idx => idx.Index("studentdb")); // returns an IGetResponse mapped 1-to-1 with the Elasticsearch JSON response
var tweet = response.Source; // the original document
Console.WriteLine($"获取studentdb索引的数据:\r\n {JsonConvert.SerializeObject(tweet)}");
} /// <summary>
/// 查询数据
/// </summary>
public static void QueryDocument()
{
var response = client.Search<Student>(s => s.From().Size()
.Index("studentdb") //需要自己指定index
.Query(q => q
.Term(t => t.User, "kimchy") || q
.Match(mq => mq.Field(f => f.User).Query("nest"))
)
);
Console.WriteLine(JsonConvert.SerializeObject(response.Documents));
}
ElasticSearch使用C#操作文档的更多相关文章
- MongoDB(五):MongoDB操作文档
本篇文章中将讲解如何使用MongoDB操作文档. 文档的数据结构和JSON基本一致,所有存储在集合中的数据都是BSON格式.BSON是一种类似json格式的一种二进制形式的存储格式,简称Binary ...
- ElasticSearch 基础入门 and 操作索引 and 操作文档
基本概念 索引: 类似于MySQL的表.索引的结构为全文搜索作准备,不存储原始的数据. 索引可以做分布式.每一个索引有一个或者多个分片 shard.每一个分片可以有多个副本 replica. 文档: ...
- pageoffice razor pageofficelink方式调用js实现操作文档
用官方的开发者帮助文档即可,在后台实例化时一定要将pageofficecontrol控件的id属性定义,然后在前台通过定义的id属性来调用相应的方法
- 从域名到网站,快速创建全新社区站点 - phpwind一键部署操作文档
关于phpwind一键部署服务,请查阅PW官网:http://www.phpwind.com/setup.html 选择一键部署镜像版本,立即开始使用: PW建站系统(Centos 64位) ———— ...
- MongoDB第四天(操作文档,添加,更新,查询以及对于日期的相关操作)
添加文档: 添加单个文档,多个文档 package com.bjsxt.mongodbdemo; import com.mongodb.client.MongoCollection; import o ...
- Linux常用命令操作文档
Ls命令:列出目录内容 选项 长选项 含义 -a --all 列出所有文件,包括隐藏的文件 -d --directory 指定一个目录 -F --classify 在每个列出的名字后面加上类型指示符( ...
- Git操作文档
Git 操作文档 Git 是一个十分流行的版本控制系统,Git 和 SVN 区别在于,SVN使用增量文件系统,存储每次提交之间的差异.而 git 使用全量文件系统,存储每次提交的文件的全部内容(sna ...
- lua的io操作文档
2014-09-16~15:26:35 I/O库提供两种不同的方式进行文件处理1.io表调用方式:使用io表,io.open将返回指定文件的描述,并且所有的操作将围绕这个文件描述 io表同样提供三种预 ...
- SEO配置信息操作文档
一.title(网站标题) title,就是浏览器上显示的那些内容,不仅用户能看到,也能被搜索引擎检索到(搜索引擎在抓取网页时,最先读取的就是网页标题,所以title是否正确设置极其重要.)title ...
随机推荐
- magicbook 踩坑
新买了 magicbook pro 16.1寸的荣耀笔记本,在使用过程中发现了一些问题. 电脑详情 规格: magicbook pro 16.1 cpu: 锐龙 R5 操作系统: deepin 15. ...
- 【LEETCODE】55、数组分类,适中级别,题目:79、611、950
第950题,这题我是真的没想到居然会说使用队列去做,大神的答案,拿过来瞻仰一下 package y2019.Algorithm.array; import java.util.HashMap; imp ...
- 函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!闭包访问局部变量
函数内部声明变量的时候,一定要使用var命令.如果不用的话,你实际上声明了一个全局变量! function f1(){ n=999; } f1(); alert(n); 子函数可以一层一层读取到父元素 ...
- fastjson框架如何处理boolean?CURRENT_TIMESTAMP使用报错?什么是 ONLINE DDL 及 pt-online-schema-change ? getBytes引起的乱码问题?
一.使用fastjson框架进行序列化时,若莫个参数为Boolean类型,而json里的值是其它类型时,框架如何处理? 1.true, false,正常赋值2.int类型,若为1,则为true,否则为 ...
- 2019北航OO第三单元作业总结
1.梳理JML语言的理论基础.应用工具链情况 JML基础理论: JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言.JML是一种行为接口规格语言,基 ...
- Mysql 一些命令记录
查看数据库当前的状态 show processlist; 查询表索引的基数 show index from LoadingPlan; 重新统计表格的索引基数 analyze table Loading ...
- Qt ListWidget item 发起拖放
第一步:重写类 MyListWidget 继承自 QListWidget 第二步:重写 mousePressEvent 函数 和 mouseMoveEvent 函数 void mousePressEv ...
- 编译安装php服务报错问题:configure: error: Cannot find libmysqlclient under /usr.
在编译安装php服务时报错: checking for MSSQL support via FreeTDS... nochecking for MySQL support... yeschecking ...
- 将集群WEB节点静态数据迁移到共享存储器(LNMP环境)
系统版本:Centos 6.5 机器及IP规划如下: 192.168.0.117 MySQL 192.168.0.118 nginx+php 192.168.0.123 nfs ①在NFS机器上 ...
- tcpdump截帧工具使用
一.tcpdump介绍 tcpdump是Linux下功能强大的截帧工具,相当于windows下的wireshark一下,只是操作方式是命令行的,需要熟悉Linux命令行操作. 常用的Linux ...