es的C# api 的封装和使用说明

这篇博客详细介绍了如何使用C#的Elastic client通过ConnectionSettings连接到Elasticsearch服务器,并探讨了不同类型的Request,如SearchRequest、GetAliasRequest等。文章还讨论了C#的Query功能,包括matchQuery和DateRangeQuery的组合使用,以及Aggregation的TermsAggregation和DateHistogramAggregation在分类和时间分析中的应用。与JavaScript API相比,C#版有更强的数据类型校验,这要求在使用时明确指定数据类型。
摘要由CSDN通过智能技术生成
说明:
  1. C#的elastic client通过ConnectionSettings来指定es server的地址
  2. C#的Request有多种类型封装,比如Search相关的封装SearchRequest, GetAlias相关的GetAliasRequest, Count相关的CountRequest, ping相关的PingRequest等。  即,es默认支持的关键字都有对应的request
  3. C#的Query有matchQuery、DateRangeQuery等, 相互之间用条件运算符可以组合查询, 最终生成的restful 请求头转换为bool query了
  4. C#的Aggregation也有TermsAggregation、DateHistogramAggregation等, 用来普通分类和时间分类等, 不像js,需要自己用字符串指定。 返回值也要在Aggregations里查看。
      public async Task<IReadOnlyCollection<DateHistogramBucket>> GetScanPatientStatistics( string systemID, string startDate, string endDate, DateInterval dateInterval, string indices = "*scanstatistics*" )
        {
            var client = GetClient();
            var filterPath = new string [] { "aggregations.*.buckets" };
            var request = new SearchRequest(indices)
            {
                Query = new MatchQuery() { Field = "systemID" , Query = systemID }
                    && new DateRangeQuery() { Field = "timeStamp" , GreaterThanOrEqualTo = startDate, LessThanOrEqualTo = endDate, Format = "yyyyMMdd" },
                Aggregations = new DateHistogramAggregation( "agg_date_histogram_timeStamp" )
                {
                    Field = "timeStamp" ,
                    Interval = dateInterval,
                    Format = "yyyy-MM-dd HH:mm:ss" ,
                    Aggregations = new ValueCountAggregation( "agg_count_systemID" , "systemID.keyword" )
                },
                FilterPath = filterPath
            };
            var response = await client.SearchAsync<CTDMS<CTDMSItem>>(request);
            var dateHistogram = response.Aggregations.DateHistogram( "agg_date_histogram_timeStamp" );
            return dateHistogram.Buckets;
        }
  1. Buckets可以转为Dictionary
        public async Task<Dictionary<DateTime, double ?>> GetScanPatientStatistics( string systemID, DateRangeEnum dateRange, DateInterval dateInterval, string indices = "*scanstatistics*" )
        {
            var buckets = await GetScanPatientStatistics(systemID, DateRangeEnumExtensions.ToString(dateRange), "now" , dateInterval, indices);
            return buckets.ToDictionary(k => k.Date, v => v.Values.OfType<ValueAggregate>().First().Value);
        }
  1. C#对于各种查询都有数据类型校验, 这点和js api不相同, 因此必须指定类型


代码如下:


namespace My.ElasticSearch
{
    /// <summary>
    /// sample code 如下:
    ///  var search = new SearchDomainService();
    //获取当月的每天温度
    /*
    var result = search.GetDetectorTemp("987654321098",
        DetectorEnum.DetectorTempL,
        DateRangeEnum.CurrentMonth,
        DateInterval.Day).GetAwaiter().GetResult();
    */

    //获取当前es中的所有index
    /*
    var indices = search.GetIndices().GetAwaiter().GetResult();
    */

    //当前服务是否ok
    /*
    var isAvailable = search.IsAvailable().GetAwaiter().GetResult();
    */

    //获取扫描量
    /*
    var count = search.GetScanCount("987654321098", "now/y").GetAwaiter().GetResult();
    */

    //获取每一类部位的扫描量
    /*
    var stat = search.GetScanBodypartStatistics("987654321098", DateRangeEnum.CurrentYear).GetAwaiter().GetResult();
    */

    //获取最后一次上传日志的时间
    /*
    var date = search.GetLatestUploadTime("987654321098").GetAwaiter().GetResult();
    */

    /*
    var date = search.GetLatestUploadTime<CTScanStatistics<CTScanStatisticsItem>, CTScanStatisticsItem>("987654321098").GetAwaiter().GetResult();
    */
    /// </summary>
    public class ElasticSearchDomainService
    {
        private ConnectionSettings _connectionSettings;
        private ElasticClient _client = null;

        public ElasticSearchDomainService()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值