c# Elastic.Clients.Elasticsearch 动态查询
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;
}
留待后查,同时方便他人
联系我:ivesbao@163.com
联系我:ivesbao@163.com

浙公网安备 33010602011771号