用 【NEST】 在C#中操作ElasticSearch

准备工作: VSCode开发环境,在终端控制台(Ctrl+~)输入命令 dotnet add package Nest 安装NEST包,安装好后打开项目的.csproj文件如下图。

一、索引数据:

 1 using Nest;
 2 using System;
 3
 4 namespace NetCoreFirst
 5 {
 6     public class ImportES
 7     {
 8         public static string ElasticsearchMethod()
 9         {
10             //1.通过es服务器 localhost:9200 来定义es client
11             var node = new Uri("http://localhost:9200");
12             var indexName = "esbot";
13             var settings = new ConnectionSettings(node).DefaultIndex(indexName);
14             var elastic = new ElasticClient(settings);
15
16             //es服务器健康检查
17             var res = elastic.ClusterHealth();
18             Console.WriteLine(res.Status);
19
20             //2.创建索引esbot
21             if (!elastic.IndexExists(indexName).Exists)
22             {
23                 var createIndexResponse = elastic.CreateIndex(indexName);
24                 var mappingBlogPost = elastic.Map<Resume>(s => s.AutoMap());
25             }
26
27             //3.构造数据
28             string[] nameArray = {"Cody", "Blake", "Dennis", "Evan ", "Harris", "Jason ", "Lambert ", "Louis ", "Milton ", "Cody" };
29             string[] skillArray = {"c#", "c++", "java", "python", "php", "Linux", "ruby", "matlab", "perl", "powershell" };
30             long[] ageRange = { 24, 25, 26, 27, 28, 29, 30, 31, 32, 33 };
31             for(int i=0; i< 10;i++)
32             {
33                 var resume = new Resume
34                 {
35                     Id= Guid.NewGuid(),
36                     Name=nameArray[i],
37                     Age=ageRange[i],
38                     Skills="My skill is Azure and " + skillArray[i]
39                 };
40                 //4.导入数据到索引
41                 IIndexResponse bulkIndexResponse = elastic.Index(resume, p => p.Type(typeof(Resume)).Id(i).Refresh(null));
42             }
43
44             //5. 简单搜索
45             var searchResult = elastic.Search<Resume>(sr => sr.Query(q => q.MatchAll()));
46             // System.Console.WriteLine(searchResult.Hits.Count);
47             // System.Console.ReadLine();
48             var resumesCount = searchResult.Hits.Count.ToString();
49             return resumesCount;
50         }
51     }
52 }

Resume类的定义:

 1 using Nest;
 2 using System;
 3
 4 namespace NetCoreFirst
 5 {
 6     [ElasticsearchType(Name="candidate", IdProperty="Id")]
 7     public class Resume
 8     {
 9         [Text(Name="id", Index=false)]
10         public Guid? Id { get; set; }
11
12         [Text(Name="name", Index=true)]
13         public string Name { get; set; }
14
15         [Text(Name="age", Index=false)]
16         public long Age { get; set; }
17
18         [Text(Name="skills", Index=true)]
19         public string Skills { get; set; }
20     }
21 }

二、搜索数据

 1 using Nest;
 2 using System;
 3
 4 namespace NetCoreFirst
 5 {
 6     public class SearchES
 7     {
 8         public static string indexName="bank";
 9         public static Uri node = new Uri("http://localhost:9200");
10         public static ConnectionSettings settings = new ConnectionSettings(node).DefaultIndex(indexName);
11         public static ElasticClient elastic = new ElasticClient(settings);
12
13         public static ISearchResponse<Bank> SearchNumber()
14         {
15             string dictionaryKey = "balance";
16             var dictionary = Extension.BankDictionary();
17             var rangeField = dictionary[dictionaryKey];
18             var gt = 40000;
19             var lt = 40100;
20             var searchResponse = elastic.Search<Bank>(es => es.Query(q =>
21                     q.Range(r => r.Name("").Field(rangeField).GreaterThan(gt).LessThan(lt).Boost(2.0))));
22             return searchResponse;
23         }
24
25         public static ISearchResponse<Bank> SearchString()
26         {
27             string queryStr = "";
28             var searchResponse = elastic.Search<Bank>(es => es.Query(q =>
29                     q.QueryString(qs => qs.Query(queryStr))));
30             return searchResponse;
31         }
32
33         public static ISearchResponse<Bank> SearchField()
34         {
35             string queryStr = "35";
36             string dictionaryKey = "age";
37             var dictionary = Extension.BankDictionary();
38             var rangeField = dictionary[dictionaryKey];
39             var searchResponse = elastic.Search<Bank>(es => es.Query(q =>
40                     q.Match(m => m.Field(rangeField).Query(queryStr))));
41             return searchResponse;
42         }
43     }
44 }

Extension类和Bank类的定义

 1     public class Extension
 2     {
 3         public static Dictionary<string, Expression<Func<Resume,object>>> ResumeDictionary()
 4         {
 5             return new Dictionary<string, Expression<Func<Resume, object>>>
 6             {
 7                 {"age", p=>p.Age},
 8                 {"name", p=>p.Name}
 9             };
10         }
11
12         public static Dictionary<string, Expression<Func<Bank, object>>> BankDictionary()
13         {
14             return new Dictionary<string, Expression<Func<Bank, object>>>
15             {
16                 {"account_number", p => p.account_number},
17                 {"age", p => p.age},
18                 {"balance", p => p.balance}
19             };
20         }
21     }
22
23     [ElasticsearchType(Name="account", IdProperty="Id")]
24     public class Bank
25     {
26         public long account_number {get;set;}
27         public string address { get; set; }
28         public long age { get; set; }
29         public long balance { get; set; }
30         public string city { get; set; }
31         public string email { get; set; }
32         public string employer { get; set; }
33         public string firstname { get; set; }
34         public string gender { get; set; }
35         public string lastname { get; set; }
36         public string state { get; set; }
37     }

*****************************
*** Keep learning and growing. ***
*****************************

原文地址:https://www.cnblogs.com/gangle/p/9337472.html

时间: 2024-11-08 23:39:40

用 【NEST】 在C#中操作ElasticSearch的相关文章

elk快速入门-在kibana中如何使用devtools操作elasticsearch

在kibana中如何使用devtools操作elasticsearch:前言: 首先需要安装elasticsearch,kibana ,下载地址 https://www.elastic.co/cn/downloads/ 权威指南:https://www.elastic.co/guide/cn/index.html 视频:https://www.elastic.co/cn/webinars/getting-started-elasticsearch?elektra=home&storm=sub1

使用python操作elasticsearch实现数据插入分析

前言: 例行公事,有些人可能不太了解elasticsearch,下面搜了一段,大家瞅一眼. Elasticsearch是一款分布式搜索引擎,支持在大数据环境中进行实时数据分析.它基于Apache Lucene文本搜索引擎,内部功能通过ReST API暴露给外部.除了通过HTTP直接访问Elasticsearch,还可以通过支持Java.JavaScript.Python及更多语言的客户端库来访问.它也支持集成Apache Hadoop环境.Elasticsearch在有些处理海量数据的公司中已经

使用Logstash同步数据至Elasticsearch,Spring Boot中集成Elasticsearch实现搜索

安装logstash.同步数据至ElasticSearch 为什么使用logstash来同步,CSDN上有一篇文章简要的分析了以下几种同步工具的优缺点:https://blog.csdn.net/laoyang360/article/details/51694519. 下面开始实践: 1. 下载Logstash安装包,需要注意版本与elasticsearch保持一致,windows系统下直接解压即可. 2.添加同步mysql数据库的配置,并将mysql连接驱动jar包放在指定的配置目录 注: 目

java操作elasticsearch实现批量添加数据(bulk)

java操作elasticsearch实现批量添加主要使用了bulk 代码如下: //bulk批量操作(批量添加) @Test public void test7() throws IOException { //1.指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称 Settings settings = Settings.builder().put("cluster.name", "my-application"

java操作elasticsearch实现基本的增删改查操作

一.在进行java操作elasticsearch之前,请确认好集群的名称及对应的ES节点ip和端口 1.查看ES的集群名称 #进入elasticsearch.yml配置文件/opt/elasticsearch-6.4.3/config vim elasticsearch.yml 2.查询ip 二.根据文档id查询数据 /** * */ package com.cyb.test; import java.net.InetAddress; import java.net.UnknownHostExc

springboot整合es客户端操作elasticsearch(二)

在上章节中整合elasticsearch客户端出现版本问题进行了处理,这章来进行springboot整合得操作 环境:elaticsearch6.2.1,springboot 2.1.8 客户端版本采用6.6.1 一 pom.xml依赖引入 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns

使用JAVA操作ElasticSearch(Java API 和Spring Data ElasticSearch)

Java API 我的ElasticSearch集群的版本是6.2.4,导入elasticsearch相关的maven依赖也是6.2.4,不同版本的api可能会有差异 一:maven依赖 <!--elasticsearch核心依赖--> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version

webBrowser中操作网页元素全攻略

webBrowser中操作网页元素全攻略 2012-12-20 14:21 188人阅读 评论(0) 收藏 举报 1.获取非input控件的值: webBrowser1.Document.All["控件ID"].InnerText; 或webBrowser1.Document.GetElementById("控件ID").InnerText; 或webBrowser1.Document.GetElementById("控件ID").GetAttr

C#.Net中操作XML方法一

我们知道XML是一种可标记性的语言,用来标记数据.定义数据类型,是一种执行用户对自己的标记语言进行定义的源语言.由于结构好.而且easy理解,就好比一棵树,层次关系分明,因此也经常把一些数据存储到XML文件里,以下就说一下怎样在C#中操作XML文件. 经常使用类 XmlDocument:XML的文档.就好比一棵树. XmlNode:XML中的结点类,就好比树枝. XmlElement:XML中元素,就好比树枝上的叶子. 既然我们已经了解这几个经常使用类的,那么让你画一棵树是不是非常easy呢?