ASP.NET Web API + Elasticsearch 6.x 快速做个全文搜索

最近想做个全文搜索,设想用 ASP.NET Web API + Elasticsearch 6.x 来实现。

网上搜了下 Elasticsearch 的资料,大部分是讲 linux 平台下如何用 java 来开发,有少量讲在 windows 平台下用 c# 开发的,且版本是 Elasticsearch 5.x 。无奈上官网撸串,这里梳理下官网的教程,希望对大家有所帮助。

一、Elasticsearch 的安装

下载  MSI(https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.1.msi)安装文件,完成后双击安装,点下一步,全部默认设置。

二、运行 Elasticsearch

打开 cmd,输入

cd %PROGRAMFILES%\Elastic\Elasticsearch\bin

回车,输入

.\elasticsearch.exe

回车

三、开发环境搭建

1、新建一个 webApi 工程

2、安装 NEST,用来连接 Elasticsearch

打开 NuGet 包管理器控制台,输入以下命令

Install-Package NEST -Version 6.0.1

注意安装时带上版本号,NEST 与 Elasticsearch 版本对应,这是个坑。

3、连接 Elasticsearch

新建一个连接类 ClientHelper.cs

 1 public class ClientHelper
 2 {
 3     private static ClientHelper clientHelper = null;
 4     // 默认索引
 5     public static string DEFAULT_INDEX = "resource";
 6     private ElasticClient Client()
 7     {
 8         var nodes = new Uri[]
 9         {
10             new Uri("http://127.0.0.1:9200")
11         };
12         var pool = new StaticConnectionPool(nodes);
13         var settings = new ConnectionSettings(pool)
14             .DefaultIndex(DEFAULT_INDEX)
15             .PrettyJson();
16             //.BasicAuthentication("elastic", "changeme");
17
18         return new ElasticClient(settings);
19     }
20
21     public static ElasticClient getInstance()
22     {
23         if(clientHelper==null){
24             clientHelper = new ClientHelper();
25         }
26         return clientHelper.Client();
27     }
28 }

新建映射类 Resource.cs

1 [ElasticsearchType(Name = "resource", IdProperty = "ID")]
2 public class Resource
3 {
4     [Keyword(Name = "id")]
5     public string ID { get; set; }
6
7     [Text(Name = "name")]
8     public string NAME { get; set; }
9 }

4、增删查改操作

新建一个 api 控制器 ESController.cs

 1 public class ESController : ApiController
 2 {
 3   // GET: api/ES/1
 4   // 按 id 查询单条记录
 5   public Resource Get(string id)
 6   {
 7       var client = ClientHelper.getInstance();
 8       var response = client.Get<Resource>(id, idx => idx.Index(ClientHelper.DEFAULT_INDEX));
 9       return response.Source;
10   }
11
12   // POST api/ES
13   // 批量导入数据库数据
14   public string Post()
15   {
16       using (DataContext db = new DataContext())
17        {
18           var client = ClientHelper.getInstance();
19           List<Demo>  items= db.demo.ToList();
20           for (int i = 0; i < 100;i++ )
21           {
22              var item = items[i];
23              Resource mod = new Resource();
24              mod.ID = item.ID;
25              mod.NAME = item.NAME;
26              client.Index<Resource>(mod, idx => idx.Index(ClientHelper.DEFAULT_INDEX));
27           }
28       }
29       return "OK";
30    }
31
32    // PUT api/ES/5
33    // 按 id 更新单条数据
34    public Result Put(string id)
35    {
36        var client = ClientHelper.getInstance();
37        var response = client.Update<Resource>(id, idx => idx.Index(ClientHelper.DEFAULT_INDEX));
38        return response.Result;
39    }
40
41     // DELETE api/ES/5
42     // 按 id 删除单条数据
43     public Result Delete(string id)
44     {
45       var client = ClientHelper.getInstance();
46       var response = client.Delete<Resource>(id, idx => idx.Index(ClientHelper.DEFAULT_INDEX));
47       return response.Result;
48     }
49 }

另新建一个api 控制器 SearchController.cs 用来提供搜索服务

 1 public class SearchController : ApiController
 2 {
 3     // GET: api/Search/
 4     public List<IHit<Resource>> Get(string id)
 5     {
 6         var client = ClientHelper.getInstance();
 7         var modList = client.Search<Resource>(s => s
 8             .From(0)
 9             .Size(10)
10             .Query(q => q.Term(t => t.NAME, id))
11         );
12         return modList.Hits.ToList();
13     }
14 }

5、试一试

(1) 导入数据到 Elasticsearch

POST http://localhost:8389/api/es

(2) 查询 id 为 1 的记录

GET http://localhost:8389/api/es/1

(3) 更新 id 为 1 的记录

PUT http://localhost:8389/api/es/1

(4) 删除 id 为 1 的记录

DELETE http://localhost:8389/api/es/1

(5) 查询名字中带有 中 的记录

GET http://localhost:8389/api/Search/中

一个简单的全文索引服务就完成了!

原文地址:https://www.cnblogs.com/lifefriend/p/10159371.html

时间: 2024-11-05 13:39:26

ASP.NET Web API + Elasticsearch 6.x 快速做个全文搜索的相关文章

ASP.NET Web API路由系统:路由系统的几个核心类型

虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集System.Web.Http.dll中)已经移除了对System.Web.dll程序集的依赖,实现在ASP.NET Web API框架中的URL路由系统亦是如此.也就是说,ASP.NET Web API核心框架的URL路由系统与ASP.NET本身的路由系统是相对独立的.但是当我们采用基于Web Host的方式(定义在程序集System.Web.H

使用 SoapUI 测试ASP.NET Web API

我们为不同的目的开发了很多web服务,经过授权的用户就可以访问和使用这些web服务.soapUI 是一个强大的测试web服务的工具,他不仅可以测试SOAP服务,他也支持测试RESTful服务.在这里我将解释如何使用 SOAP UI 测试ASP.NET Web API. 由于 Web 服务是被程序调用的, 一般不会提供界面让最终用户或测试人员直接使用,在 soapUI 等工具出现之前,测试人员不得不自己编写程序来测试它, 这就要求测试人员花费很大的精力了解底层的接口,调用关系和详细的协议,导致他们

初试ASP.NET Web API/MVC API(附Demo)

参考页面: http://www.yuanjiaocheng.net/webapi/media-formatter.html http://www.yuanjiaocheng.net/webapi/webapi-filters.html http://www.yuanjiaocheng.net/webapi/create-crud-api-1.html http://www.yuanjiaocheng.net/webapi/create-crud-api-1-get.html http://ww

[水煮 ASP.NET Web API2 方法论](1-5)ASP.NET Web API Scaffolding(模板)

问题 我们想快速启动一个 ASP.NET Web API 解决方案. 解决方案 APS.NET 模板一开始就支持 ASP.NET Web API.使用模板往我们的项目中添加 Controller,在我们解决方案的 Controllers 文件夹上右键,选择"添加"->"Scaffolding". 即用模式,可以从下面选择一个: Web API2 Controller Web API2 Controller with      actions, using En

ASP.NET Web API 2 对 CORS 的支持

CORS概念 跨域资源共享 (CORS) 是一种万维网联合会 (W3C) 规范(通常被认为是 HTML5 的一部分),它可让 JavaScript 克服由浏览器施加的同域策略安全限制. 所谓同域策略,就是 JavaScript 只能对包含网页的同一个域进行 AJAX 回调(其中,“域”就是主机名.协议和端口号的组合). 例如,http://foo.com 中某个网页上的 JavaScript 无法对 http://bar.com(或 http://www.foo.com.https://foo.

ASP.NET Web API(MVC API)

ASP.NET Web API是??一个框架,可以很容易构建达成了广泛的HTTP服务客户端,包括浏览器和移动设备.是构建RESTful应用程序的理想平台的.NET框架. 上面是微软对Web API给出的定义,其中包含两个关键字:HTTP和RESTful,其实从这一方面,大家就可以看出Web API和它的同胞兄弟:WebService和WCF有些不同了. HTTP 对于HTTP大家都不是很陌生,因为我们每天浏览网页填写的URL就是HTTP开头,但只是知道有这个东西,确没有想过它是什么,就好像我们对

使用ASP.NET Web API和Web API Client Gen使Angular 2应用程序的开发更加高效

本文介绍“ 为ASP.NET Web API生成TypeScript客户端API ”,重点介绍Angular 2+代码示例和各自的SDLC.如果您正在开发.NET Core Web API后端,则可能需要阅读为ASP.NET Core Web API生成C#Client API. 背景 自WebApiClientGenAngular 2仍然在RC2时,自2016年6月v1.9.0-beta 以来,对Angular2的支持已经可用.并且在WebApiClientGenv2.0中提供了对Angula

ASP.NET Web API 2基于令牌的身份验证

基于令牌的认证 我们知道WEB网站的身份验证一般通过session或者cookie完成的,登录成功后客户端发送的任何请求都带上cookie,服务端根据客户端发送来的cookie来识别用户. WEB API使用这样的方法不是很适合,于是就有了基于令牌的认证,使用令牌认证有几个好处:可扩展性.松散耦合.移动终端调用比较简单等等,别人都用上了,你还有理由不用吗? 下面我们花个20分钟的时间来实现一个简单的WEB API token认证: Step 1: 新建一个空的WEB API项目,项目名称就设置为

Asp.Net Web API 2第四课——HttpClient消息处理器

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 Asp.Net Web API 导航   Asp.Net Web API第一课:入门http://www.cnblogs.com/aehyok/p/3432158.html Asp.Net Web API第二课:CRUD操作http://www