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.
注意安装时带上版本号,NEST 与 Elasticsearch 版本对应,这是个坑。
3、连接 Elasticsearch
新建一个连接类 ClientHelper.cs
public class ClientHelper
{
private static ClientHelper clientHelper = null;
// 默认索引
public static string DEFAULT_INDEX = "resource";
private ElasticClient Client()
{
var nodes = new Uri[]
{
new Uri("http://127.0.0.1:9200")
};
var pool = new StaticConnectionPool(nodes);
var settings = new ConnectionSettings(pool)
.DefaultIndex(DEFAULT_INDEX)
.PrettyJson();
//.BasicAuthentication("elastic", "changeme"); return new ElasticClient(settings);
} public static ElasticClient getInstance()
{
if(clientHelper==null){
clientHelper = new ClientHelper();
}
return clientHelper.Client();
}
}
新建索引类 Resource.cs
[ElasticsearchType(Name = "resource", IdProperty = "ID")]
public class Resource
{
[Keyword(Name = "id")]
public string ID { get; set; } [Text(Name = "name")]
public string NAME { get; set; }
}
4、增删查改操作
新建一个 api 控制器 ESController.cs
public class ESController : ApiController
{
// GET: api/ES/1
// 按 id 查询单条记录
public Resource Get(string id)
{
var client = ClientHelper.getInstance();
var response = client.Get<Resource>(id, idx => idx.Index(ClientHelper.DEFAULT_INDEX));
return response.Source;
} // POST api/ES
// 批量导入数据库数据
public string Post()
{
using (DataContext db = new DataContext())
{
var client = ClientHelper.getInstance();
List<Demo> items= db.demo.ToList();
for (int i = ; i < ;i++ )
{
var item = items[i];
Resource mod = new Resource();
mod.ID = item.ID;
mod.NAME = item.NAME;
client.Index<Resource>(mod, idx => idx.Index(ClientHelper.DEFAULT_INDEX));
}
}
return "OK";
} // PUT api/ES/5
// 按 id 更新单条数据
public Result Put(string id)
{
var client = ClientHelper.getInstance();
var response = client.Update<Resource>(id, idx => idx.Index(ClientHelper.DEFAULT_INDEX));
return response.Result;
} // DELETE api/ES/5
// 按 id 删除单条数据
public Result Delete(string id)
{
var client = ClientHelper.getInstance();
var response = client.Delete<Resource>(id, idx => idx.Index(ClientHelper.DEFAULT_INDEX));
return response.Result;
}
}
另新建一个api 控制器 SearchController.cs 用来提供搜索服务
public class SearchController : ApiController
{
// GET: api/Search/
public List<IHit<Resource>> Get(string id)
{
var client = ClientHelper.getInstance();
var modList = client.Search<Resource>(s => s
.From()
.Size()
.Query(q => q.Term(t => t.NAME, id))
);
return modList.Hits.ToList();
}
}
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/中
一个简单的全文索引服务就完成了!
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中)已经移除 ...
- 跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?
在<通过扩展让ASP.NET Web API支持W3C的CORS规范>中,我们通过自定义的HttpMessageHandler自行为ASP.NET Web API实现了针对CORS的支持, ...
- JavaScript跨域调用、JSONP、CORS与ASP.NET Web API[共8篇]
[第1篇] 同源策略与JSONP 浏览器是访问Internet的工具,也是客户端应用的宿主,它为客户端应用提供一个寄宿和运行的环境.而这里所说的应用,基本是指在浏览器中执行的客户端JavaScript ...
- ASP.NET Web API框架揭秘:路由系统的几个核心类型
ASP.NET Web API框架揭秘:路由系统的几个核心类型 虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分 ...
- 使用 SoapUI 测试ASP.NET Web API
我们为不同的目的开发了很多web服务,经过授权的用户就可以访问和使用这些web服务.soapUI 是一个强大的测试web服务的工具,他不仅可以测试SOAP服务,他也支持测试RESTful服务.在这里我 ...
- ASP.NET Web API 接口执行时间监控
软件产品常常会出现这样的情况:产品性能因某些无法预料的瓶颈而受到干扰,导致程序的处理效率降低,性能得不到充分的发挥.如何快速有效地找到软件产品的性能瓶颈,则是我们感兴趣的内容之一. 在本文中,我将解释 ...
- 初试ASP.NET Web API/MVC API(附Demo)
写在前面 HTTP RESTful 创建Web API 调用Web API 运行截图及Demo下载 ASP.NET Web API是一个框架,可以很容易构建达成了广泛的HTTP服务客户端,包括浏览 ...
- [水煮 ASP.NET Web API 2 方法论] 目 录
一.ASP.NET 中的 Web API [水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API 与 ASP.NET MVC 在同一个进程 ...
- ASP.NET Web API 2 对 CORS 的支持
CORS概念 跨域资源共享 (CORS) 是一种万维网联合会 (W3C) 规范(通常被认为是 HTML5 的一部分),它可让 JavaScript 克服由浏览器施加的同域策略安全限制. 所谓同域策略, ...
随机推荐
- Hive 系列(二)权限管理
Hive 系列(二)权限管理 一.关于 Hive Beeline 问题 启动 hiveserver2 服务,启动 beeline -u jdbc:hive2:// 正常 ,启动 beeline -u ...
- 繁体简体转化_langconv.py
from copy import deepcopyimport re try: import psyco psyco.full()except: pass try: from zh_wiki impo ...
- 查询数据库中的表格---通过构造方法将数据存入到List集合中---遍历进行输出
package cn.jy.demo; import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.Res ...
- cocos jsb工程转html 工程
1 CCBoot.js prepare方法:注掉下面这行,先加载moduleConfig中的脚本后加载user脚本 //newJsList = newJsList.concat(jsList); // ...
- 导入mysql报错问题
今天数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题 2个解决方法: 1.临时修改:mysql>set global max ...
- 求先序排列(NOIP2001&NOIP水题测试(2017082301))
题目链接:求先序排列 这道题讲白了,就是数的构造,然后遍历. 思路大致是这样: 我们先通过后序遍历,找到当前区间的根,然后在中序遍历中找到根对应的下标,然后就可以分出左右子树,建立当前根与左右子树根的 ...
- clion配置c/c++环境
打开这个界面 点击添加Cygwin选择下载的Cygwin在进行下面的配置 去网站https://www.cygwin.com/选择路径即可(这里只写了配置过程中的关键步骤并且附上IDE的链接直接安装 ...
- 2018.11.02 NOIP模拟 距离(斜率优化dp)
传送门 分四个方向分别讨论. 每次枚举当前行iii,然后对于第二维jjj用斜率优化dpdpdp. f[i][j]=(j−k)2+mindisk2f[i][j]=(j-k)^2+mindis_k^2f[ ...
- shell 常见面试
1.求100以内的质数 #!/bin/bash n= ;i<=n;i++)) do ;x<=i;x++)) do b=$(( $i%$x )) ]]; then a=$a+ fi done ...
- hadoop配置分区
1.运行MR,得出HDFS路径下数据 2.创建 Hive 表 映射 HDFS下的数据 3.为数据创建分区,在hive下执行 source 分区表: TIPS:结果集的时间,必须在分区范围内: 可以理解 ...