【问题标题】:Searching by list of date ranges in elastic search在弹性搜索中按日期范围列表搜索
【发布时间】:2018-10-13 15:32:39
【问题描述】:

我正在开发一个需要从任意时间表中选择有效日期的系统。

我希望能够使用 DateRanges 列表作为我的搜索请求,但我不确定如何在弹性 NEST 中实际有效地做到这一点。

这里有一些示例代码,说明我正在尝试有效地做些什么。

// my list of date ranges
var dateQuery = new List<DateRangeQuery>();

// make query foreach day
foreach (var day in valid_days)
{
    dateQuery.Add(new DateRangeQuery
    {
        Field = "Date",
        GreaterThanOrEqualTo = day.Item1, // DateTime start of day tuple
        LessThanOrEqualTo = day.Item2 // DateTime end of day tuple
    });
}

// query by list of search request           
var search = new SearchRequest
{
    // how do i use a list of date time's here?
    Query = dateQuery;
}

var example = _client.Search(search);

编辑:

已使用此代码解决,感谢您的帮助!

注意:如果您不了解 DSL 语法,NEST API 会很混乱。

var dateQuery = new QueryContainer();

// make date range query from valid day list
foreach (var day in daylist)
{
    // x = x || y
    dateQuery = dateQuery || new DateRangeQuery
    {
        Field = "date",
        GreaterThanOrEqualTo = day.Item1, // start of day
        LessThanOrEqualTo = day.Item2 // end of day
    };
}

// match by query
var search = _client.Search(
    s => s.Query(
        q => && q.Bool(b => b.Should(dateQuery)));

谈到弹性,他们希望将来也为 C# 开发人员简化 NEST API,所以请注意这个空间。

所有的选择器都感觉代码太臃肿了。

我用过 ||运算符而不是 |因为||如果您的表达式被评估并匹配,则具有性能优势,它会更快返回。

希望这对寻找它的人有所帮助。

【问题讨论】:

    标签: c# elasticsearch


    【解决方案1】:

    我猜您需要将 bool 查询与 must 一起用于多个范围查询。像

    {
    "query": {
        "bool": {
            "must": [
                {
                    "range": {
                        "created_at": {
                            "gte": "2013-12-09T00:00:00.000Z"
                        }
                    }
                },
                {
                    "range": {
                        "happens_on": {
                            "lte": "2013-12-16T00:00:00.000Z"
                        }
                    }
                }
            ]
        }
     }
    }
    

    在 .Net 客户端中,我认为您可以使用 QueryContainer。请参考这个link,因为我对elasticsearch的.Net客户端不太熟悉。

    【讨论】:

    • 感谢您的回复,json 为我指明了正确的方向,一旦我开始工作,我将使用相关的 csharp 对其进行更新,以供其他寻找此内容的人使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多