ElasticSearch学习总结4(sql操作ES)

可以直接使用sql语句操作es数据库,比如查询people索引库

也可以输出json格式

也可以输出csv格式

使用接口调用工具(ApiPost),也可以请求到结果:

在.NetCore程序中使用sql查询数据

using Newtonsoft.Json;
using System;
using System.Data;
using System.IO;
using System.Net;
using System.Text;

namespace ElasticSearch
{
    public class SendHttp
    {
        public static string url = "http://localhost:9200/_xpack/sql?format=csv";

        public static DataTable GetDataBySql(string sql)
        {
            DataTable dataTable = new DataTable();
            try
            {
                //获取数据
                string jsonstr = Post(url, new QueryParam() { query = sql });

                //按行拆分
                var lines = jsonstr.Split("\r\n");

                //获取表头字段
                foreach (string item in lines[0].Split(","))
                {
                    //可以做类型转换
                    dataTable.Columns.Add(item, typeof(System.String));
                }

                //表数据
                for (int i = 1; i < lines.Length - 1; i++)
                {
                    var filedvalue = lines[i].Split(",");
                    var row = dataTable.NewRow();
                    for (int j = 0; j < dataTable.Columns.Count; j++)
                    {
                        row[j] = filedvalue[j];
                    }
                    dataTable.Rows.Add(row);
                }
            }
            catch (Exception)
            {

                throw;
            }
            return dataTable;
        }


        public static string Post(string url, QueryParam queryParam)
        {
            HttpWebRequest request = null;
            try
            {
                request = (HttpWebRequest)WebRequest.Create(url);
                var data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(queryParam));
                request.Method = "POST";
                request.ContentType = "application/json;charset=UTF-8";
                request.Timeout = 90000;

                //设置入参
                using (var stream = request.GetRequestStream())
                {
                    stream.Write(data, 0, data.Length);
                }

                //发送请求
                var response = (HttpWebResponse)request.GetResponse();

                //读取出参
                using (var resStream = response.GetResponseStream())
                {
                    using (var reader = new StreamReader(resStream, Encoding.UTF8))
                    {
                        return reader.ReadToEnd();
                    }
                }
            }
            catch (Exception ex)
            {
                return null;
            }
            finally
            {
                //释放链接
                if (request != null)
                {
                    request.Abort();
                }
            }
        }

    }


    public class QueryParam
    {
        public string query { get; set; }
    }
}

main方法:

class Program
    {
        static void Main(string[] args)
        {
            //使用sql查询数据
            var data = SendHttp.GetDataBySql("select * from people");

            Console.ReadLine();
        }
    }

执行结果:

这样就把数据放到一个DataTable容器里面了。

猜你喜欢

转载自blog.csdn.net/liangmengbk/article/details/120298748