惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
J
Java Code Geeks
S
SegmentFault 最新的问题
L
LangChain Blog
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
IT之家
IT之家
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
MongoDB | Blog
MongoDB | Blog
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
H
Help Net Security
阮一峰的网络日志
阮一峰的网络日志
Jina AI
Jina AI
N
Netflix TechBlog - Medium
A
About on SuperTechFans
博客园 - 叶小钗
美团技术团队
人人都是产品经理
人人都是产品经理
D
DataBreaches.Net

博客园 - Hey,Coder!

微信小程序 web方案实现调音器功能 systemctl slice配置docker最大占用cpu 内存 pipenv环境变量配置 .net8验证码 数据库差异对比工具 docker部署prometheus grafana pgexporter Alertmanager ubuntu24 换源 ssh配置 ubuntu24 Harbor部署 ubuntu24 kvm部署 cockpit web管理界面 .net api代理 Ubuntu 24.04 DMAR IOMMU 报错修复 uniapp iOS App 上架 vs文件软链接 Docker 网络别名 .net8通用中间件处理公共返回值结构 .net环境下OpenTelemetry Body 读取注意事项 jaeger界面显示异常 .net opentelemetry collector jaeger c# opentelemetry 自定义export c# opentelemetry 自定义export c# 生成对象的初始化代码 Elasticsearch ILM 与 Data Stream 概念及实例说明文档 portainer httphelper封装 Ocelot + Consul + SignalR 粘性会话 正交软件架构 docker postgresql17 主从复制 rabbitmq总结与c#示例 docker rabbitmq quartz dashboard
c# Elastic.Clients.Elasticsearch 动态查询
Hey,Coder! · 2026-03-03 · via 博客园 - Hey,Coder!
ElasticsearchClientSettings elasticsearchClientSettings = new ElasticsearchClientSettings(new StaticNodePool(urls.Select((string h) => new Uri(h)).ToArray())).Authentication(new BasicAuthentication(username, password));
  if (!string.IsNullOrWhiteSpace(defaultIndex))
  {
      elasticsearchClientSettings.DefaultIndex(defaultIndex);
  }

  var client=  new ElasticsearchClient(elasticsearchClientSettings);
  var query = BuildQueryDescriptor(dto);
  var data = client.SearchAsync<LogEntity>(s => s
                                .Indices(LogDocumentName)
                                .From((dto.PageIndex - 1) * dto.PageSize)
                                .Size(dto.PageSize)
                                .Query(query)
                                );
  data.Wait();


 private Action<QueryDescriptor<LogEntity>> BuildQueryDescriptor(LogSearchInDto condition)
 {
     var mustQueries = new List<Action<QueryDescriptor<LogEntity>>>
     {
     };
     // StartDate
     if (condition.StartTime.HasValue)
     {
         // 时区已经是UTC, ELK中的时区也是UTC, 直接使用即可,否则需转时区
         mustQueries.Add(m =>
             m.Range(r =>
                 r.Date(d =>
                     d.Field(i => i.LogTime).Gte(DateMath.Anchored(condition.StartTime.Value)))));
     }
     // EndDate
     if (condition.EndTime.HasValue)
     {
         mustQueries.Add(m =>
             m.Range(r =>
                 r.Date(d =>
                     d.Field(i => i.LogTime).Lte(DateMath.Anchored(condition.EndTime.Value)))));
     }

     // 关键字检索SearchText
     if (!string.IsNullOrWhiteSpace(condition.Keywords))
     {
         mustQueries.Add(m => m.Match(c => c.Field("body.keyword").Query(condition.Keywords)));
     }

     Action<QueryDescriptor<LogEntity>> retQuery = q => q.Bool(b => b.Filter(mustQueries.ToArray()));

     return retQuery;
 }