简体   繁体   English

滚动查看所有记录 ElasticSearch C# Nest

[英]Scroll for all records ElasticSearch C# Nest

Query to scroll at the matching records from the query查询以滚动查询中的匹配记录

this is the query of nest in C# to get all the records from nest C# find many questions which can solve it by using different method linq method but i want to do this this way any suggestions help would be appreciated这是 nest in C# 的查询,以从 nest C# 获取所有记录找到许多问题,这些问题可以通过使用不同的方法 linq 方法来解决,但我想这样做任何建议帮助将不胜感激

string[] MERCHANTNO = MerchantId.Split(",");
var mustClause = new List<QueryContainer>();
var filterClause = new List<QueryContainer>();
var filters = new List<QueryContainer>();
filters.Add(new TermsQuery{
    Field = new Field("MERCHANTNO"),
    Terms = MERCHANTNO,
});

Logger.LogInformation(clsName, funcName, "Filter Clause is:", filters);

var SearchRequest = new SearchRequest<AcquirerDTO>(idxName) {
    Size       = 10000,
    SearchType = Elasticsearch.Net.SearchType.QueryThenFetch,
    Scroll     = "5m",
    Query = new BoolQuery { Must = filters }
};

var searchResponse = await _elasticClient.SearchAsync<AcquirerDTO>( SearchRequest );

The code for Scroll all the Records you have in ElasticSearch is滚动所有记录的代码 ElasticSearch 是

Filter筛选

  filters.Add(new TermsQuery {
                        Field = new Field("MERCHANTNO"),       >>> Value needs to be searched
                        Terms = MERCHANTNO,
                    });

Date Range Filter日期范围过滤器

                filterClause.Add(new DateRangeQuery {
                    Boost = 1.1,
                    Field = new Field("filedate"),
                    GreaterThanOrEqualTo = DateMath.Anchored(yesterday),
                    LessThanOrEqualTo = DateMath.Anchored(Today),
                    Format = "yyyy-MM-dd",
                    TimeZone = "+01:00"
                });
               

Search Request for scrolling滚动搜索请求

                var SearchRequest = new SearchRequest<AcquirerDTO>(idxName) {
                    From = 0,
                    Scroll = scrollTimeoutMinutes,
                    Size = scrollPageSize,
                    Query = new BoolQuery
                    {
                        Must = filters,
                        Filter = filterClause
                    }
                };
                var searchResponse = await _elasticClient.SearchAsync<AcquirerDTO>(SearchRequest);

                if (searchResponse.ApiCall.ResponseBodyInBytes != null) {
                    var requestJson = System.Text.Encoding.UTF8.GetString(searchResponse.ApiCall.RequestBodyInBytes);
                    var JsonFormatQuery = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(requestJson), Formatting.Indented);
                    
                }

This is the code for Scrolling all the results in kibana这是在 kibana 中滚动所有结果的代码

       List<AcquirerDTO> results = new List<AcquirerDTO>();
                if (searchResponse.Documents.Any())
                    results.AddRange(searchResponse.Documents);

                string scrollid = searchResponse.ScrollId;
                bool isScrollSetHasData = true;

                while (isScrollSetHasData)
                {
                    ISearchResponse<AcquirerDTO> loopingResponse = _elasticClient.Scroll<AcquirerDTO>(scrollTimeoutMinutes, scrollid);
                    if (loopingResponse.IsValid)
                    {
                        results.AddRange(loopingResponse.Documents);
                        scrollid = loopingResponse.ScrollId;
                    }
                    isScrollSetHasData = loopingResponse.Documents.Any();
                }
                var records = results;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM