不能在elasticsearch对象语法中组合2个日期范围查询

c86crjj0  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(307)

我希望搜索一个文档的方式是,根据“from”和“to”字段的精确值进行过滤。我使用传递给bool查询示例的daterangequery对象。
当只过滤一个日期时,此过滤器工作正常,但当两个日期都处于活动状态时,它根本不返回任何文档。代码波纹管

DateRangeQuery fromDateRangeQuery = new DateRangeQuery()
        {
            Name = "from_query",
            Field = "from",
            GreaterThanOrEqualTo = dateFrom,
            LessThanOrEqualTo = dateFrom,
        };
        queryContainers.Add(fromDateRangeQuery);

        DateRangeQuery ToDateRangeQuery = new DateRangeQuery()
        {
            Name = "to_query",
            Field = "to",
            GreaterThanOrEqualTo = dateTo,
            LessThanOrEqualTo = dateTo,
        };
        queryContainers.Add(ToDateRangeQuery);
        //more terms filters not related to the 2 fields 
        var searchRequest = new SearchRequest("0___aggregate_");
        searchRequest.SearchType = SearchType.QueryThenFetch;
        searchRequest.From = 0;
        searchRequest.Size = 10000;
        searchRequest.Query = boolQuery;

        var searchResponse = Get().SearchAsync<AggregationHolder>(searchRequest);
        searchResponse.Wait(60000);

        var status = searchResponse.Result;

datefrom和dateto都是常规的日期时间对象。我做错了什么,为什么我不能合并这两个过滤器?

nzkunb0c

nzkunb0c1#

也许,问题是你的约会方式。你能试试下面的吗?

ElasticClient elasticClient = new ElasticClient(new ConnectionSettings(
    new Uri(connString))
    .RequestTimeout(TimeSpan.FromMinutes(5))
    .DefaultIndex(defaultIndexName)
);
DateRangeQuery queryFrom = new DateRangeQuery()
{
    Name = "from_query",
    Field = "from",
    GreaterThanOrEqualTo = "05/12/2020 01:03:15",
    LessThanOrEqualTo = "05/12/2020 01:03:16",
    Format = "dd/MM/yyyy HH:mm:ss"
};
DateRangeQuery queryTo = new DateRangeQuery()
{
    Name = "to_query",
    Field = "to",
    GreaterThanOrEqualTo = "05/12/2020 11:20:32",
    LessThanOrEqualTo = "05/12/2020 11:20:33",
    Format = "dd/MM/yyyy HH:mm:ss"
};
QueryContainer queryMain = queryFrom & queryTo;

ISearchResponse<AggregationHolder> searchResponse = elasticClient.Search<AggregationHolder>(s => s
    .RequestConfiguration(r => r.DisableDirectStreaming())
    .From(0)
    .Size(100)
    .Query(q2 => q2
        .Bool(b => b
        .Should(queryMain))
    )
);

相关问题