• ElasticSearch7.x:C#的Nest客户端分组,多字段排序-Tems-TopHis


    var mustQuerys = new List<Func<QueryContainerDescriptor<toutiao>, QueryContainer>>();//筛选
    //多组排序
    //List<Func<SortDescriptor<toutiao>, IPromise<IList<ISort>>>> sort = new List<Func<SortDescriptor<toutiao>, IPromise<IList<ISort>>>>();
    //sort.Add(srt => srt.Field(sf => sf.Field(p => p.addtime).Order(SortOrder.Descending)));
    //query.Add(q => q.Match(t => t.Field("title").Query("生产")));
    mustQuerys.Add(q => q.Match(m => m.Field(f => f.title).Query("旋转"))); //筛选
    //List<Func<FieldSortDescriptor<toutiao>, IFieldSort>> sort = new List<Func<FieldSortDescriptor<toutiao>, IFieldSort>>();

    //////排序
    //Func<SortDescriptor<toutiao>, IPromise<IList<ISort>>> sortDesc = sd =>
    //{
    // //根据分值排序
    // // sd.Descending(SortSpecialField.Score);

    // //排序
    // if (1 == 1)
    // sd.Descending(d => d.cid);
    // else
    // sd.Descending(d => d.cid);
    // return sd;
    //};
    Func<MaxAggregationDescriptor<toutiao>, IMaxAggregation> maxagg = sd1 => sd1.Field("addtime");//排序字段
    Func<MaxAggregationDescriptor<toutiao>, IMaxAggregation> maxrankid = sd2 => sd2.Field("rankid");//排序字段
    //List<Func<MaxAggregationDescriptor<toutiao>, IMaxAggregation>> maxagg1 = new List<Func<MaxAggregationDescriptor<toutiao>, IMaxAggregation>>();
    //maxagg1.Add(m=>m.Field("rankid"));
    //maxagg1.Add(m => m.Field("addtime"));
    //sd => sd.Field("addtime");
    //权限=》时间
    Func<TermsOrderDescriptor<toutiao>, IPromise<IList<TermsOrder>>> orderra = or => or.Descending("order_rankid_key").Descending("order_addtime_key");
    //时间
    Func<TermsOrderDescriptor<toutiao>, IPromise<IList<TermsOrder>>> orderdt = or => or.Descending("order_addtime_key");
    //List<Func<FieldSortDescriptor<toutiao>, IFieldSort>> sort1 = new List<Func<FieldSortDescriptor<toutiao>, IFieldSort>>();
    //sort.Add(sf => sf.Field(p => p.addtime).Order(SortOrder.Descending));
    //List<Func<QueryContainerDescriptor<toutiao>, QueryContainer>> query = new List<Func<QueryContainerDescriptor<toutiao>, QueryContainer>>();
    ////一个月之内的搜索记录
    //query.Add(q => q.Term(t => t.Field("title").Value("阶段")));

    var searchResponse = client.Search<toutiao>(s => s
    .Query(q => q.Bool(b => b.Must(mustQuerys.ToArray())))
    .Aggregations(aggs => aggs
    .Terms("group_by_cid", t => t //分组
    .Order(orderra)//排序,对应max
    .Field(p => p.cid)//分组字段

    .Aggregations(aa => aa
    .Max("order_addtime_key", maxagg)//构建分组排序字段
    .Max("order_rankid_key", maxrankid)//构建分组排序字段
    .TopHits("top_cid_hits", th => th //返回前几行
    //.Sort(sortDesc)
    .Size(1)
    //.Sort(s=>s.Descending(f=>f.rankid))
    .Source(src => src.Includes(fs => fs //返回字段
    .Field(p => p.title)
    .Field(p => p.addtime)
    .Field(p => p.cid)
    .Field(p => p.rankid)
    ))
    .Highlight(h => h
    .Fields(hf => hf.Field(p => p.title)
    .PreTags("<b style='color:red'>")
    .PostTags("</b>")))

    )

    ))));
    var results = new List<toutiao>();
    var terms = searchResponse.Aggregations.Terms("group_by_cid"); //获取分组结果集

    foreach (var bucket in terms.Buckets)
    {
    var hitcid = bucket.TopHits("top_cid_hits");//获取分组子集结果集
    //关键词高亮显示
    foreach (var hi in hitcid.Hits<toutiao>())
    {
    foreach (var highlightField in hi.Highlight)
    {
    if (highlightField.Key == "title")
    {
    foreach (var highlight in highlightField.Value)
    {
    hi.Source.Htitle = highlight.ToString();
    }
    }
    }
    results.Add(hi.Source);

    }
    //var device = hitcid.Hits<toutiao>().First();// hitcid.Documents<toutiao>().First();

    //results.Add(device.Source);
    //var device1 = hitcid.Documents<toutiao>().ToList<toutiao>();
    //foreach (var item in device1)
    //{
    // results.Add(item);
    //}
    }

  • 相关阅读:
    java学习笔记----数据类型,变量,常量
    java学习笔记 --- java基础语法
    java学习笔记----java入门
    python 类方法
    nginx 限制ip/限制访问路径
    python 异常处理
    python 内置模块
    python 模块与包
    python函数基础用法
    python函数高级运用
  • 原文地址:https://www.cnblogs.com/wangwenlong8/p/13698026.html
Copyright © 2020-2023  润新知