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; }//分类IDpublic 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()
//删除文档
Task<bool> Delete(string id)
//添加文档
Task Put(Document doc)
//获取标签汇总
Task<object> AggsTag(int top = 60)
//获取年汇总
Task<object> AggsYear(int top = 60)
//获取年-月汇总
Task<object> AggsMonth(int top = 60)
//搜索
Task<Tuple<IList<Document>, int>> Search(DocumentFilter filter)
添加示例
以下是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