当前位置: 首页 > news >正文

.Net使用ElasticSearch

文章目录

  • 前言
  • 主体内容
    • 一.Kibana中ElasticSearch的基础操作
      • 1.GET(查询)
      • 1.POST(新增)
      • 1.PUT(修改)
      • 1.DELET(删除)
    • 二.在.Net中,对ElasticSearch进行基础操作
      • 1.DotNet连接ElasticSearch
      • 2.DotNet查询ElasticSearch指定Index的数据
        • a.这里用了一些NEST包的查询条件,非常的不方便
        • b.使用Kibana中的ES语句查询ElasticSearch
        • c.使用Sql语句查询ElasticSearch(需要单独下载对应版本的ElasticSearch-Sql插件,待验证)
      • 3.DotNet新增ElasticSearch数据
      • 4.DotNet修改ElasticSearch数据
      • 5.DotNet删除ElasticSearch数据

前言

Elastic官网:https://www.elastic.co/guide/en/elasticsearch/reference/current/eql.html#specify-a-timestamp-or-event-category-field

CSDN大佬的ElasticSearch和Kibana安装通道

本文章的主要目的就是了解ElasticSearch的基本用法,以及在.Net中简单操作一些ElasticSearch的数据

Elasticsearch 是一个开源的分布式搜索和分析引擎,它被设计用来快速、准确地进行大规模数据的搜索和分析。Elasticsearch 基于 Apache Lucene 搜索引擎构建,提供了一个分布式的实时文档存储和检索引擎,适用于各种用例,包括文本搜索、日志分析、应用程序性能监控等。

以下是 Elasticsearch 的一些主要特点和用途:

全文搜索:Elasticsearch 支持全文搜索,可以快速检索大量的文本数据,并提供相关性排序和高亮显示等功能。

实时数据分析:Elasticsearch 具有实时性,可以快速索引新数据并立即使其可查询,适用于实时监控和分析场景。

分布式架构:Elasticsearch 是分布式的,数据被自动分片存储在集群中的多个节点上,提供了高可用性和横向扩展性。

多种用途:Elasticsearch 可以用于各种用例,包括搜索引擎、日志和指标分析、安全信息和事件管理等。

RESTful API:Elasticsearch 提供了基于 RESTful API 的交互方式,方便与各种编程语言和工具集成。

强大的聚合功能:Elasticsearch 提供了丰富的聚合功能,可以对数据进行统计、分组、过滤等操作。

总的来说,Elasticsearch 是一个功能强大且灵活的搜索和分析引擎,广泛应用于企业级应用程序中,为用户提供快速、准确的数据搜索和分析能力。

主体内容

一.Kibana中ElasticSearch的基础操作

进入Kibana在左侧的菜单栏中,有一个开发工具,里面可以进行简单的ElasticSearch命令操作
注意:ElasticSearch中的语言类型为强类型语言,命令字符GET(查询),POST(新增),PUT(修改),DELETE(删除)只能以大写为前缀;document中的字段建议小写,在.Net中操作的时候大写前缀会无法辨别,
在这里插入图片描述

1.GET(查询)

查询所有索引(Index)

GET _search

查询指定索引

GET user/_search

添加查询条件
这里推荐一个在线sql格式转es格式转换工具 PrintLove:https://old.printlove.cn/tools/sql2es
这个网址可以将我们熟知的sql语句转换成es所需的条件语句,另外这里还有几个其他格式文档的转换
在这里插入图片描述

这样我们在kibana中就能执行对应的条件过滤了

GET user/_search
{"query": {"bool": {"must": [{"match_phrase": {"name": {"query": "黄"}}}]}},"from": 0,"size": 1
}

在这里插入图片描述

1.POST(新增)

命令格式 POST user/_doc/id 其中id不指定,系统会自动生成一个字符串id

POST user/_doc
{"name":"hgcjd","age":18
}

在这里插入图片描述

1.PUT(修改)

命令格式 PUT index/_doc/id

PUT user/_doc/b2B_O44B65XW4Pz-I4W7
{"name":"hgcjd2","age":18
}

在这里插入图片描述

1.DELET(删除)

命令格式 Delete index/_doc/id

Delete user/_doc/b2B_O44B65XW4Pz-I4W7

在这里插入图片描述

二.在.Net中,对ElasticSearch进行基础操作

这里我使用的是.net6的控制台程序,需要安装NEST包
在这里插入图片描述

1.DotNet连接ElasticSearch

连接成功后,//开始执行操作占位符,就可以放其他的es操作代码块了

var settings = new ConnectionSettings(new Uri("https://localhost:9200/"))//.DefaultIndex("user") //可以在连接ElasticSearch的时候,就选择Index.BasicAuthentication("elastic", "你的elastic密码")// 忽略证书验证,仅用于测试环境,请勿在生产环境中使用.ServerCertificateValidationCallback((sender, certificate, chain, sslPolicyErrors) => true);var client = new ElasticClient(settings);
var clusterHealth = client.Cluster.Health();
if (clusterHealth.IsValid){//开始执行操作
}else{Console.WriteLine($"ElasticSearch连接失败{clusterHealth.OriginalException.Message}");
}

添加一个User类

public class User
{public string Id { get; set; }public string Name { get; set; }public int Age { get; set; }
}

2.DotNet查询ElasticSearch指定Index的数据

a.这里用了一些NEST包的查询条件,非常的不方便
#region 查询数据var searchResponse = await client.SearchAsync<User>(s => s.Index("user") //选择Index,否则程序会异常//.From((1 - 1) * 10) //取数启始位置//.Size(10)   //指定页面大小//.Query(e=>e.Range(r=>r.Field(f=>f.Age).GreaterThanOrEquals(18).LessThan(80)))    //查询条件:年龄大于等于18 并且 年龄小于80 //.Query(e=>e.Prefix(r=>r.Field(f=>f.Name).Value("黄")))   //查询条件:名字以"黄"字开头//.Query(e => e.Match(r => r.Field(f => f.Name).Query("尔")))  //查询条件:名字包含"尔"字//.Sort(s=>s.Field(f=>f.Age,SortOrder.Descending))   //根据年龄降序排序);if (searchResponse.IsValid){foreach (var hit in searchResponse.Hits){var model = new User(){Id = hit.Id,Name = hit.Source.Name,Age = hit.Source.Age,};Console.WriteLine($"ID:{model.Id};\t姓名:{model.Name};\t年龄:{model.Age}");//userList.Add(model);}//Console.WriteLine(JsonConvert.SerializeObject(userList));}else{Console.WriteLine($"查询失败:{searchResponse.OriginalException.Message}");}#endregion

在这里插入图片描述

b.使用Kibana中的ES语句查询ElasticSearch

这里获取到的结果是一个很长的json字符串,还需要单独解析

 var searchResponse = client.LowLevel.Search<StringResponse>("user", @"{""query"": {""bool"": {""must"": [{""match_all"": { }}],""must_not"": [ ],""should"": [ ]}},""from"": 0,""size"": 10,""sort"": [ ],""aggs"": { }}");if (searchResponse.Success){Console.WriteLine(searchResponse.Body); // 处理查询结果}else{Console.WriteLine($"Error executing search query: {searchResponse.OriginalException.Message}");}

在这里插入图片描述

c.使用Sql语句查询ElasticSearch(需要单独下载对应版本的ElasticSearch-Sql插件,待验证)

github大佬的ElasticSearch-Sql安装地址,找到对应的ES版本:https://github.com/NLPchina/elasticsearch-sql/releases
我安装的es版本太新了,是elasticsearch-8.12.2版本的,看了一下大佬的插件版本,还没有更新到这

#region 使用sql查询
var sql = "SELECT * FROM user order by age desc";
var response = await client.SearchAsync<User>(s => s.Index("user").Query(q => q.QueryString(qs => qs.Query(sql))));if (response.IsValid)
{foreach (var hit in response.Hits){var model = new User(){Id = hit.Id,Name = hit.Source.Name,Age = hit.Source.Age,};Console.WriteLine($"ID:{model.Id};\t姓名:{model.Name};\t年龄:{model.Age}");}
}
else
{Console.WriteLine($"Error executing SQL query: {response.OriginalException.Message}");
}#endregion

3.DotNet新增ElasticSearch数据

#region 新增数据
var UserInfo = new User()
{Name = "黄瓜炒鸡蛋",Age = 20,
};
var addResponse = client.IndexDocument(UserInfo);
if (addResponse.IsValid)
{Console.WriteLine($"新增ID为{addResponse.Id}的数据成功");
}
else
{Console.WriteLine($"操作失败:{addResponse.OriginalException.Message}");
}
#endregion

4.DotNet修改ElasticSearch数据

下面的bmB9O44B65XW4Pz-foX9为数据Id

#region 修改数据
var updateResponse = client.Update<User>("bmB9O44B65XW4Pz-foX9", u => u
.Index("user") // 替换为你的索引名称
.Doc(new User
{Name = "福尔摩斯",Age = 35,
})
);if (updateResponse.IsValid)
{Console.WriteLine("修改成功");
}
else
{Console.WriteLine("修改失败: " + updateResponse.OriginalException.Message);
}
#endregion

5.DotNet删除ElasticSearch数据

下面的cGCFO44B65XW4Pz-M4X5为数据Id

#region 删除数据
var deleteResponse = client.Delete<User>("cGCFO44B65XW4Pz-M4X5", d => d
.Index("user") // 替换为你的索引名称
);if (deleteResponse.IsValid)
{Console.WriteLine("删除成功");
}
else
{Console.WriteLine("删除失败 " + deleteResponse.OriginalException.Message);
}
#endregion

相关文章:

.Net使用ElasticSearch

文章目录 前言主体内容一.Kibana中ElasticSearch的基础操作1.GET&#xff08;查询&#xff09;1.POST&#xff08;新增&#xff09;1.PUT&#xff08;修改&#xff09;1.DELET&#xff08;删除&#xff09; 二.在.Net中&#xff0c;对ElasticSearch进行基础操作1.DotNet连接Ela…...

HTML5、CSS3面试题(二)

上一章:HTML5、CSS3面试题&#xff08;一&#xff09; 哪些是块级元素那些是行内元素&#xff0c;各有什么特点 &#xff1f;&#xff08;必会&#xff09; 行内元素: a、span、b、img、strong、input、select、lable、em、button、textarea 、selecting 块级元素&#xff1…...

sqllab第十一关通关笔记

知识点&#xff1a; 发现登录框就可以尝试注入登录框一般都是字符型注入通过注入可以获取其他表的信息绕过手段 单引号闭合联合注入也可以进行错误注入 首先看界面是一个登录框&#xff1b;通过admin admin登录进去&#xff0c;发现页面会把用户名和密码的登录信息打印出来&am…...

机械女生,双非本985硕,目前学了C 基础知识,转嵌入式还是java更好?

作为单片机项目开发的卖课佬&#xff0c;个人建议&#xff0c;先转嵌入式单片机开发方向&#xff0c;哈哈。 java我也学过&#xff0c;还学过oracle、mysql数据库&#xff0c;只是当时没做笔记&#xff0c;找不好充分的装逼证据了。 从实习通过业余时间&#xff0c;学到快正式毕…...

Python之字符串操作大全(29种方法)

本章详细介绍了常用的29种字符串操作方法及代码示例。 1. 重复输出字符串 print(x * 20) 输出&#xff1a;xxxxxxxxxxxxxxxxxxxx 2. 通过索引获取字符串 print(hello world[2:5]) 输出&#xff1a;llo 3. in 判断字符是否在字符串内 print(e in hello world) 输出&…...

ArcGIS学习(十五)用地适宜性评价

ArcGIS学习(十五)用地适宜性评价 本任务给大家带来的内容是用地适宜性评价。 用地适宜性评价是大家在平时工作中最常接触到的分析场景之一。尤其是在国土空间规划的大背景下,用地适宜性评价变得越来越重要。 此外,我们之前的任务主要是使用矢量数据进行分析。本案例是主讲…...

【matlab】如何将.mat文件与.nii文件互转

【matlab】如何将.mat文件与.nii文件互转 .mat转为.nii文件 有时候代码需要读取的是.nii文件&#xff0c;但是如何现有的数据是.mat格式&#xff0c;需要将.mata转化为.nii文件 1、先加载.mat文件 % 加载.mat文件 load(your_mat_file.mat); % 请将your_mat_file.mat替换为实…...

Uni-app开发Canvas当子组件示例,点点绘制图形

前言 使用Uni-app 实现封装一个Canvas渲染的子组件&#xff0c;实现通过传入两点绘制一条完整的路程 具体逻辑看我发的后端和数据库设计 C# 根据两点名称&#xff0c;寻找两短路程的最优解&#xff0c;【有数据库设计&#xff0c;完整代码】 即使不了解具体逻辑&#xff0c;该…...

从金蝶云星空到钉钉通过接口配置打通数据

从金蝶云星空到钉钉通过接口配置打通数据 对接系统金蝶云星空 金蝶K/3Cloud&#xff08;金蝶云星空&#xff09;是移动互联网时代的新型ERP&#xff0c;是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”&#xff0c;旨在帮助企业打造面…...

Unreal发布Android在刘海屏手机上不能全屏显示问题

Unreal 4.27发布Android在刘海屏手机上不能全屏显示问题 Android设置全屏刘海屏全屏设置4.27设置刘海屏在部分手机不能显示问题 Android设置全屏 AndroidManifest.xml文件配置 ...<activity android:name"com.epicgames.ue4.GameActivity" android:label"st…...

hive库表占用空间大小的命令

1、查每个hive表占用的空间大小 hdfs dfs -du -h /user/hive/warehouse 2、按占用空间大小降序排列 hdfs dfs -du /user/hive/warehouse/ipms.db | sort -nr 3、查某一个分区占用空间大小&#xff08;单位G) hadoop fs -ls /user/hive/warehouse/ipms.db/dw_ft_se_nt_u_gen…...

关于go中的select

笔记仓库&#xff1a;gitee.com/xiaoyinhui 代码中的解释纯个人理解&#xff0c;有不对的望指出 package testsimport ("fmt""testing" )var uCnt int 0func TestSelece(t *testing.T) {// 对于 select 语句&#xff0c;在进入该语句时&#xff0c;会按源…...

【Node.js从基础到高级运用】十一、构建RESTful API

在本篇博客中&#xff0c;我们将综合之前讨论的内容&#xff0c;深入探索如何使用Node.js构建一个RESTful API。我们将重点讨论设计合理的API端点&#xff0c;展示如何通过代码实现这些端点&#xff0c;并指导如何使用Postman测试我们的API&#xff0c;确保其按预期工作。 前提…...

Python和MATLAB数字信号波形和模型模拟

要点 Python和MATLAB实现以下波形和模型模拟 以给定采样率模拟正弦信号&#xff0c;生成给定参数的方波信号&#xff0c;生成给定参数隔离矩形脉冲&#xff0c;生成并绘制线性调频信号。快速傅里叶变换结果释义&#xff1a;复数离散傅里叶变换、频率仓和快速傅里叶变换移位&am…...

华为OD技术C卷“测试用例执行计划”Java解答

描述 示例 算法思路1 整体思路是&#xff0c;先读取特性的优先级和测试用例覆盖的特性列表&#xff0c;然后计算每个测试用例的优先级&#xff0c;并将其与测试用例的索引存储到二维数组中。最后按照优先级和索引排序&#xff0c;输出测试用例的索引&#xff0c;即为执行顺序。…...

solana 入门 1

solana-co-learn Solana 开发学习笔记(一)——从 Hello World 出发 安装开发环境 windows下环境配置 wsl First start with installing WSL on your system. wsl --install wsl安装Ubuntu 列出可用的分发版 wsl.exe --list --online显示&#xff1a; 以下是可安装的有效…...

JavaEE之多线程(创建线程的五种写法)详解

&#x1f63d;博主CSDN主页: 小源_&#x1f63d; &#x1f58b;️个人专栏: JavaEE &#x1f600;努力追逐大佬们的步伐~ 目录 1. 前言 2. 操作系统"内核" 3. 创建线程的五种写法 (我们重点要掌握最后一种写法!!) 3.1 继承 Thread, 重写 run 3. 2 实现 Runnabl…...

ChatGPT国内能用吗?中国用户怎么才能使用ChatGPT?

与ChatGPT类似的国内网站&#xff0c;他们都能提供和ChatGPT相似的能力&#xff0c;而且可以在国内直接使用。 点击直达方式 百科GPT官网&#xff1a;baikegpt.cn ChatGPT是基于GPT-3.5架构的语言模型的一个实例&#xff0c;由OpenAI开发。以下是ChatGPT的发展历史&#xff1…...

集群保持集群负载均衡和hash一致性

集群保持负载均衡和一致性哈希是在构建分布式系统时经常涉及的两个重要概念。 负载均衡&#xff1a; - 在集群中&#xff0c;负载均衡是指将传入的请求有效地分发到不同的服务器上&#xff0c;以确保每台服务器都能够处理适量的流量&#xff0c;避免某些服务器过载而造成性能问…...

吴恩达深度学习笔记:神经网络的编程基础2.9-2.14

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第二周&#xff1a;神经网络的编程基础 (Basics of Neural Network programming)2.9 逻辑回归中的梯度下降&#xff08;Logistic Regression Gradient Descent&#xff09; 第一门课&#xff…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...