本文共 3401 字,大约阅读时间需要 11 分钟。
BeetleX.ESDoc组件是基于ElasticSearch服务的文档搜索扩展组件。它在BeetleX.Elasticsearch的基础上包装一些基于文档检索的功能和方法,可以让你在不了解ElasticSearch API的情况下直接存储,删除和搜索相关信息。
信息结构
BeetleX.ESDoc定义了一个基础的文档结构方便进行数据存储,其结构如下:
public class Document { //唯一标识 public string ID { get; set; } //标题 public string Title { get; set; } //文本内容 public string Content { get; set; } //摘要 public string Summary { get; set; } //分类名称 public string Category { get; set; } //分类ID public string CategoryID { get; set; } //创建用户 public string User { get; set; } //用户昵称 public string NickName { get; set; } //标签,多个用空格分隔 public string Tag { get; set; } //源地址 public string SourceUrl { get; set; } //创建时间 public DateTime CreateTime { set; get; } }
使用
引用BeetleX.ESDoc组件后可以定义DocumentDB对象来进行文档存储和查询操作。
DocumentDB db = new DocumentDB("beetlex");await db.Init("http://192.168.2.19:9200");
构建DocumentDB对象需要带上相关索引的名称,在定义完成后调用Init方法来访问ElasticSearch服务并初始相关信息。DocumentDB是线程安全的,一般使用的时候可定义成静态。
基础方法
//删除索引Task DeleteIndex()//重新创建索引 Task ReCreateIndex()//删除文档TaskDelete(string id)//添加文档Task Put(Document doc)//获取标签汇总Task
添加示例
以下是blog.beetlex.io使用组件添加文档的情况
public static async Task AsyncPost(DataBase.Post post, DataBase.Project project, HttpApiServer server){ try { Document doc = new Document(); doc.ID = post.ID; doc.CategoryID = post.Project; doc.Content = post.Content; doc.CreateTime = post.CreateTime; doc.SourceUrl = post.SourceUrl; doc.Summary = post.Digest; doc.Category = project?.Name; doc.Tag = post.Tag; doc.Title = post.Title; doc.User = post.User; doc.NickName = post.NickName; await DB.Put(eSBlog); } catch (Exception e_) { if (server.EnableLog(EventArgs.LogType.Error)) { server.Log(EventArgs.LogType.Error, null, $"Async post to elasticsearch error {e_.Message}"); } }}
查询
组件查询文档需要创建DocumentFilter来进行查询,对象包括了一些查询条件的定义。
//指定分类public string CategoryID { get; set; }//标签,可以指定多个,以空格分隔public string Tag { get; set; }//查询内容,如果标题命中查询词会提升排序的权重public string Query { get; set; }public int Page { get; set; }public int Size { get; set; }public DateTime? StartTime { get; set; }public DateTime? EndTime { get; set; }
存储数据
可以通过Head查看相关文档索引存储情况
查询示例
DocumentDB db = new DocumentDB("beetlex");await db.Init("http://192.168.2.19:9200");var filter = db.CreateFilter(0);filter.Query = "beetlex vue";var result = await filter.Search();foreach (var item in result.Item1){ Print(item);}
以上是查询内容中包括beetlex vue的数据
可以指定时间范围内的查询
DocumentDB db = new DocumentDB("beetlex");await db.Init("http://192.168.2.19:9200");var filter = db.CreateFilter(0);filter.Query = "beetlex vue";filter.StartTime = DateTime.Parse("2020-12-1");var result = await filter.Search();foreach (var item in result.Item1){ Print(item);}
Elasticsearch要求
ES每个版本的API都有变化,该组件是基于ES 6.5.3版本开发并需要安装IK分词插件。可以通过以下地址下载已经安装插件的版本
链接:https://pan.baidu.com/s/1U8hHOqVy_a4okY2l23N0Og
提取码:0wdx
BeetleX
开源跨平台通讯框架(支持TLS)轻松实现高性能:tcp、http、websocket、redis、rpc和网关等服务应用
https://beetlex.io
如果你想了解某方面的知识或文章可以把想法发送到
henryfan@msn.com|admin@beetlex.io
转载地址:http://mfudi.baihongyu.com/