广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.Net Api 中使用Elasticsearch存储文档的方法
  • 521
分享到

.Net Api 中使用Elasticsearch存储文档的方法

2024-04-02 19:04:59 521人浏览 独家记忆
摘要

目录什么是elasticsearch?用Nest使用Es数据库配置Nest操作数据库新增什么是Elasticsearch? Elasticsearch 是一个分布式、高扩展、高实时的

什么是Elasticsearch?

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

总之这个数据库可以很灵活的对你存入的数据进行分词并查询,可以灵活的处理字段内容,筛选你想要的数据,更重要的是这个数据库是分布式的,可以减少应为一个数据库down掉而导致的数据丢失。

以下简称Elasticsearch为Es数据库。前言 | Elasticsearch: 权威指南 | Elastic

用Nest使用Es数据库

配置Nest

C# 的环境中,有一个Es的官方拓展包Nest,可以让我们方便快捷的使用上Es数据库。首先在我们新建完项目后,需要在Nuget包管理中给项目安装NEST包。

安装完NEST包之后,需要新建一个Es的配置类EsConfig.cs,这里我们只使用最简单的账号,密码和数据库地址

 /// <summary>
    /// ES配置类
    /// </summary>
    public class EsConfig
    {
        /// <summary>
        /// 账号
        /// </summary>
        public string username { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        public string passWord { get; set; }
        /// <summary>
        /// ES地址
        /// </summary>
        public string url { get; set; }
    }

有了配置类之后,需要在程序启动时,对Es进行配置。首先这里先新建一个Es客户端的接口类IElasticsearchClient.cs

 /// <summary>
    /// ES客户端
    /// </summary>
    public interface IElasticsearchClient
    {
        /// <summary>
        /// 获取ElasticClient
        /// </summary>
        /// <returns></returns>
        ElasticClient GetClient();
        /// <summary>
        /// 指定index获取ElasticClient
        /// </summary>
        /// <param name="indexName"></param>
        /// <returns></returns>
        ElasticClient GetClient(string indexName);
    }

在配置对该接口的实现类ElasticsearchClient.cs,在这个实现类中我们使用了ioptions的依赖注入的形式来对配置文件进行配置,这种模式通常适用于api类型项目的配置。

我们也可以使用直接_EsConfig = Configuration.GetSection("EsConfig").Get<EsConfig>();的形式来读取配置文件进行配置

/// <summary>
    /// ES客户端
    /// </summary>
    public class ElasticsearchClient : IElasticsearchClient
    {
        public EsConfig _EsConfig;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="esConfig"></param>
        public ElasticsearchClient(IOptions<EsConfig> esConfig)
        {
            _EsConfig = esConfig.Value;
        }
        /// <summary>
        /// 获取elastic client
        /// </summary>
        /// <returns></returns>
        public ElasticClient GetClient()
        {
            if (_EsConfig == null || _EsConfig.url == null || _EsConfig.url == "")
            {
                throw new Exception("urls can not be null");
            }
            return GetClient(_EsConfig.url, "");
        }
        /// <summary>
        /// 指定index获取ElasticClient
        /// </summary>
        /// <param name="indexName"></param>
        /// <returns></returns>
        public ElasticClient GetClient(string indexName)
        {
            if (_EsConfig == null || _EsConfig.url == null || _EsConfig.url == "")
            {
                throw new Exception("urls can not be null");
            }
            return GetClient(_EsConfig.url, indexName);
        }
        /// <summary>
        /// 根据url获取ElasticClient
        /// </summary>
        /// <param name="url"></param>
        /// <param name="defaultIndex"></param>
        /// <returns></returns>
        private ElasticClient GetClient(string url, string defaultIndex = "")
        {
            if (string.IsNullOrWhiteSpace(url))
            {
                throw new Exception("urls can not be null");
            }
            var uri = new Uri(url);
            var connectionSetting = new ConnectionSettings(uri);
            if (!string.IsNullOrWhiteSpace(url))
            {
                connectionSetting.DefaultIndex(defaultIndex);
            }
            connectionSetting.BasicAuthentication(_EsConfig.username, _EsConfig.password); //设置账号密码
            return new ElasticClient(connectionSetting);
        }
        /// <summary>
        /// 根据urls获取ElasticClient
        /// </summary>
        /// <param name="urls"></param>
        /// <param name="defaultIndex"></param>
        /// <returns></returns>
        private ElasticClient GetClient(string[] urls, string defaultIndex = "")
        {
            if (urls == null || urls.Length < 1)
            {
                throw new Exception("urls can not be null");
            }
            var uris = urls.Select(p => new Uri(p)).ToArray();
            var connectionPool = new SniffinGConnectionPool(uris);
            var connectionSetting = new ConnectionSettings(connectionPool);
            if (!string.IsNullOrWhiteSpace(defaultIndex))
            {
                connectionSetting.DefaultIndex(defaultIndex);
            }
            return new ElasticClient(connectionSetting);
        }
    }

既然是依赖注入别忘了在Startup.cs中对其进行注入。

services.Configure<EsConfig>(Configuration.GetSection("EsConfig"));

操作数据库

平时在我们操作数据库之前,我们通常会有一个“建库”、“建表”等操作,在Es中我们可以理解为创建索引基础入门 | Elasticsearch: 权威指南 | Elastic。

由于Es数据库目前还没有很好的IDE去管理它,我们通常使用代码来实现表的创建,所以先新建一个Es的拓展类来创建表ElasticClientExtension.cs

 /// <summary>
    /// ElasticClient 扩展类
    /// </summary>
    public static class ElasticClientExtension
    {
        /// <summary>
        /// 创建索引
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="elasticClient"></param>
        /// <param name="indexName"></param>
        /// <param name="numberOfShards"></param>
        /// <param name="numberOfReplicas"></param>
        /// <returns></returns>
        public static bool CreateIndex<T>(this ElasticClient elasticClient, string indexName = "", int numberOfShards = 10, int numberOfReplicas = 1) where T : class
        {

            if (string.IsNullOrWhiteSpace(indexName))
            {
                indexName = typeof(T).Name;
            }

            if (elasticClient.Indices.Exists(indexName).Exists)
            {
                return false;
            }
            else
            {
                var indexState = new IndexState()
                {
                    Settings = new IndexSettings()
                    {
                        NumberOfReplicas = numberOfReplicas,
                        NumberOfShards = numberOfShards,
                    },
                };
                var response = elasticClient.Indices.Create(indexName, p => p.InitializeUsing(indexState).Map<T>(p => p.AutoMap()));
                return response.Acknowledged;
            }
        }
    }

然后就是需要创建我们针对索引的方法了,我使用的是一个索引新建一个方法,新建一个ElaticSearcHBase.cs,在这里我们假设要创建一个叫XXX的索引,首先我们要定义好一个叫XXX的类,我这里新建了一个主键和一个xml字段,用来存储xml的数据。然后我在ElaticSearchBase.cs新建一个专属于连接XXX索引的客户端Client_XXX,如果数据库中存在xxx则直接连接,如果不存在则新建后连接。

  public class XXX
    {
        public int xid { get; set; }
        [Text(Name = "xml")]
        public string xml { get; set; }
    }
  public class ElaticSearchBase
    {

        private IElasticsearchClient _client;
        public ElaticSearchBase(IElasticsearchClient client)
        {
            _client = client;
        }
        /// <summary>
        /// XXX文档索引
        /// </summary>
        public ElasticClient Client_XXX => GetXXX();

        private ElasticClient GetXXX()
        {
	    //如果数据库中存在xxx则直接连接,如果不存在则新建后连接
            var client = _client.GetClient("XXX");
            if (!client.Indices.Exists("XXX").Exists)
            {
                client.CreateIndex<XXX>("XXX");
            }
            return client;
        }
    }

接下来我们到了实操部分:

新增

private ElaticSearchBase _es = new ElaticSearchBase(_client);
//实例化对象
var xxx1 = new XXX(){tempid = 1,xml = "xmlstring"};
//存储xxx1
var res =_es.Client_XXX.IndexDocument(xxx1);
//获得Es主键
var esid = res.Id;

查询

var res = _es.Client_XXX.Get<XXX>(esid);

删除

var res = _es.Client_XXX.Delete<XXX>(esid)

修改

//实例化对象
var xxx2 = new XXX(){tempid = 2,xml = "xmlstring2"};
var upRes= _es.Client_XXX.Update<XXX, object>(ex.xmlid, upt => upt.Doc(xxx2));

还有更多的查询操作,可以查看官网内容:结构化搜索 | Elasticsearch: 权威指南 | Elastic

到此这篇关于.net Api 之如何使用Elasticsearch存储文档的文章就介绍到这了,更多相关.Net Api 使用Elasticsearch存储文档内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: .Net Api 中使用Elasticsearch存储文档的方法

本文链接: https://www.lsjlt.com/news/163711.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • .Net Api 中使用Elasticsearch存储文档的方法
    目录什么是Elasticsearch用Nest使用Es数据库配置Nest操作数据库新增什么是Elasticsearch Elasticsearch 是一个分布式、高扩展、高实时的搜索...
    99+
    2022-11-13
  • .Net Api中怎么使用Elasticsearch存储文档
    这篇文章主要介绍“.Net Api中怎么使用Elasticsearch存储文档”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“.Net Api中怎么使用Elasticsearch存...
    99+
    2023-06-29
  • 增删改查 elasticsearch中的文档API 的使用
    文档为何物?一个对象 就相当于mysql的一个record记录【文档】什么是文档?程序中大多的实体或对象能够被序列化为包含键值对的JSON对象,键(key)是字段(field)或属性(property)的名...
    99+
    2022-10-18
  • Java API文档的使用方法详解
    目录前言1. 概念2. 使用总结前言 学会使用 API 文档是一个开发者基本的素养,而许多初学者并不会在意 API 文档的使用,甚至从来没有接触过,所以写下这篇文章探讨 API 文档...
    99+
    2023-02-01
    java api文档使用方法 java的api文档 java api接口文档
  • SpringBoot使用swagger生成api接口文档的方法详解
    目录前言具体例子maven配置项目application.yml配置springApplication添加swagger注解在控制层添加swagger注解前言 在之前的文章中,使用m...
    99+
    2022-11-13
    SpringBoot swagger生成api接口文档 SpringBoot 生成api接口文档 SpringBoot swagger
  • inout在mysql存储中的使用方法
    这篇文章主要介绍inout在mysql存储中的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql数据库的存储里,我们已经学过了输入和输出的参数。还有一种参数结合了前面所说两种参数的优势,既能输入也可以输...
    99+
    2023-06-14
  • .NET Core中使用gRPC的方法
    目录1.什么是gRPC1.基本介绍2.proto文件3.上手实践2.gRPC流1.服务端流、客户端流、双向流2.NetCore Web项目作为客户端3.gRPC AOP拦截1.什么是...
    99+
    2022-11-13
  • .NET中Worker Service的使用方法
    这篇文章主要介绍了.NET中Worker Service的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。请先完成以下准备工作,以便于您理解本文。1、下载并安装最新的 ...
    99+
    2023-06-15
  • Android用文件存储数据的方法
    本文实例为大家分享了Android用文件存储数据的具体代码,供大家参考,具体内容如下存储数据示例: private void saveFileData() { BufferedWriter writer = null; try...
    99+
    2023-05-30
    android 文件 存储数据
  • Android使用文件进行数据存储的方法
    本文实例讲述了Android使用文件进行数据存储的方法。分享给大家供大家参考。具体如下: 很多时候我们开发的软件需要对处理后的数据进行存储,以供再次访问。Android为数据存...
    99+
    2022-06-06
    方法 数据 存储 数据存储 Android
  • Android使用SharedPreferences存储XML文件的实现方法
    本文实例讲述了Android使用SharedPreferences存储XML文件的实现方法。分享给大家供大家参考,具体如下: SharedPreferences是Android...
    99+
    2022-06-06
    xml文件 XML 方法 Android
  • 使用redis存储list的方法
    这篇文章运用简单易懂的例子给大家介绍使用redis存储list的方法,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在工作中遇到了一个问题就是,因为业务需求需要做redis加速,那么存放...
    99+
    2022-10-18
  • NodeJS使用七牛云存储上传文件的方法
    1-准备工作 确认安装node和npm 安装 qiniu,formidable,express模块 npm install --save qiniu formidable [x] 导入模块 le...
    99+
    2022-06-04
    上传文件 方法 NodeJS
  • MongoDB中怎么使用Save()方法更新文档
    这篇文章将为大家详细讲解有关MongoDB中怎么使用Save()方法更新文档,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在MongoDB中,可以对操作的文档进行操作,例如如何在数据库中存在了该内容,这部...
    99+
    2023-06-14
  • mysql存储函数的使用方法
    这篇文章给大家分享的是有关mysql存储函数的使用方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。什么是存储函数:封装一段sql代码,完成一种特定的功能,返回结果。存储函数的语...
    99+
    2022-10-18
  • 使用Go语言文档中的net/http.Handle函数实现HTTP路由
    使用Go语言的net/http包中的Handle函数可以方便地实现HTTP路由。在这篇文章中,我们将一步一步地讲解如何使用Handle函数来实现一个简单的HTTP路由器。让我们逐步展开。首先,让我们来了解一下Handle函数的基本用法。Ha...
    99+
    2023-11-03
    Go语言 HTTP路由 net/httpHandle函数
  • 使用Go语言文档中的net/http.FileServer函数实现静态文件服务
    Go语言是一种简洁高效的编程语言,既可以用于开发网络应用程序,也可以用于实现静态文件服务。在Go语言的标准库中,提供了一个强大的net/http包,其中的FileServer函数可以帮助我们方便地实现静态文件服务。本文将详细介绍如何使用该函...
    99+
    2023-11-04
    net/http 关键词:Go语言 FileServer
  • 怎么在MongoDB中使用delete()方法删除文档
    怎么在MongoDB中使用delete()方法删除文档?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、delete()方法官方推荐使用deleteOne()和delete...
    99+
    2023-06-14
  • 怎么在MongoDB中使用update()方法更新文档
    怎么在MongoDB中使用update()方法更新文档?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、update()命令db.collection.update(&nb...
    99+
    2023-06-14
  • GO 中的存储 API 对象:如何使用它?
    在 GO 中,存储 API 对象是一个非常重要的概念。它们是用于与持久化存储交互的接口,可以用于访问和操作数据库、文件系统、缓存等。本文将介绍 GO 中的存储 API 对象,并演示如何使用它们。 一、存储 API 对象的概述 存储 API...
    99+
    2023-06-28
    存储 api 对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作