BeetleX.WebFamily之ElasticSearch搜索集成

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BeetleX.WebFamily之ElasticSearch搜索集成相关的知识,希望对你有一定的参考价值。

        组件在最新版本中集成了基于ElasticSearch的文档搜索功能,通过这一功能可以快速地构建文档查询的webapi服务和web搜索应用。接下来介绍一下如果使用组件的ElasticSearch组件来进行文档构建和查询。

ElasticSearch要求

        组件支持7.x和6.x两个版本的ElasticSearch服务,在插件上要求装有IK中文分词插件(必须)。

使用

        新建一个控制台项目,并通过Nuget安装BeetleX.WebFamily 2.5.6或更高版本;然后在Main方法添加如下代码:

[BeetleX.FastHttpApi.Controller]
    public class Program
    {
        static void Main(string[] args)
        {
            WebHost host = new WebHost();
            host.RegisterComponent<Program>();
            host.UserElasticSearch("test_query_string", "http://192.168.2.19:9200");
            host.UseEFCore<BlogDBContext>();
            host.Setting(o =>
            {
                o.Port = 80;
                o.LogLevel = EventArgs.LogType.Info;
                o.LogToConsole = true;
            })
            .Run();
        }


        public async Task<object> Search(IHttpContext context)
        {
            var search = context.Server.GetDocument().CreateSearch(0, 20);
            search.QueryText = "beetlex websocket";
            search.Highlight = true;
            var items = await search.Execute();
            return items;
        }


        public async Task Import(IHttpContext context, EFCoreDB<BlogDBContext> db)
        {
            var doc = context.Server.GetDocument();
            var items = from a in db.DBContext.Posts select a;
            foreach (var item in items)
                await doc.Put(new Document { Category = item.Project, Content = item.Content, CreateTime = item.CreateTime, ID = item.ID, Tag = item.Tag, Title = item.Title });


        }
    }

通过WebHost的UserElasticSearch构建一个ElasticSearch的文档实例,在参数中指写相关索引名和对应的服务地址。创建完成后就可以在控制器中通过IHttpContext.Server.GetDocument()来获取相关实例并进行操作。

添加和更新

     通过DocumentDB对象的Put方法进行文档添加或更新,通过Document.ID来进行最终操作。Put方法还支持批量添加处理,只需要在参数中传入IList<Document>对象列表即可。

搜索

        可以通过DocumentDB.CreateSearch方法来创建一个Search对象来进行文档查询

public class Search
    {
        //是否返回关键字高亮,主要包括内容和标题
        public bool Highlight { get; set; }
        //查询文档所在的分类
        public string Category { get; set; }
        //查询文档所属的标签,可以多个标签以空格分开
        public string Tag { get; set; }
        //查询的内容
        public string QueryText { get; set; }
        //查询页数
        public int Page { get; set; }
        //页数据大小
        public int Size { get; set; }
        //开始时间
        public DateTime? StartTime { get; set; }
        //结束时间
        public DateTime? EndTime { get; set; }
        //是否以创建日期来排序,默认否使用结果权重
        public bool OrderByDate { get; set; }
    }

最后通过Search.Execute方法来返回查询的内容。完整示例代码可以查看

https://github.com/beetlex-io/BeetleX-Samples/tree/master/BeetleX.Samples.WebFamily.ElasticSearch

BeetleX

开源跨平台通讯框架(支持TLS)
提供高性能服务和大数据处理解决方案

https://beetlex.io

以上是关于BeetleX.WebFamily之ElasticSearch搜索集成的主要内容,如果未能解决你的问题,请参考以下文章

BeetleX.WebFamily文件图片管理集成

elk之elastic安装

Elastic 之倒排索引

Elastic Stack之kibana入门

Elastic Search之布尔查询

日志收集之--将Kafka数据导入Elastic