zoukankan      html  css  js  c++  java
  • ASP.NET Web API + Elasticsearch 6.x 快速做个全文搜索

    一、Elasticsearch 的安装 

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

    二、运行 Elasticsearch

    打开 cmd,输入

    cd %PROGRAMFILES%ElasticElasticsearchin

    回车,输入 

    .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/中

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

  • 相关阅读:
    Reactive Extensions (Rx) 入门(5) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(4) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(3) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(2) —— 安装 Reactive Extensions
    Reactive Extensions (Rx) 入门(1) —— Reactive Extensions 概要
    Xamarin NuGet 缓存包导致 already added : Landroid/support/annotation/AnimRes 问题解决方案
    Android 系统Action大全
    Xamarin Forms 实现发送通知点击跳转
    如何理解灰度发布
    推荐一款分布式微服务框架 Surging
  • 原文地址:https://www.cnblogs.com/zzw4756885/p/10233140.html
Copyright © 2011-2022 走看看