【问题标题】:How to dynamically build up a Bool query using the NEST client?如何使用 NEST 客户端动态构建 Bool 查询?
【发布时间】:2016-05-07 00:58:30
【问题描述】:

我需要能够根据某些条件将不同的查询类型添加到我的 Bool 查询中,但是我无法弄清楚如何做到这一点,因为 Must() 函数要求 params QueryContainer[] queries

例如,这是我可以做的:

desc.Query(qq => qq.Bool(qqq => qqq.Must(m => m.Range(r => r.OnField("lastModified").GreaterOrEquals("from").LowerOrEquals("to")), s => s.Prefix(p => p.OnField("test").Value("query")))));

如您所见,Range 查询和Prefix 查询在这里一起使用,但在Must 方法中以逗号分隔。我需要能够做更多类似的事情:

List<QueryContainer> queryList = new List<QueryContainer>();

    // Range
    if (searchTypes.Contains(5)) {
        QueryDescriptor<BackupEntitySearchDocument> qd = new QueryDescriptor<BackupEntitySearchDocument>();
        qd.Range(r => r.OnField("lastModified").GreaterOrEquals("from").LowerOrEquals("to"));
        queryList.Add(qd);

    }

    /// A couple other query types may be added to queryList here

    desc.Query(qq => qq.Bool(b => b.Must(queryList)));

然后能够检查并可能添加到queryList 列表中的多个其他条件。

这有意义吗?任何想法如何获得此功能?

【问题讨论】:

  • 您使用的是哪个版本的 NEST?此外,您运行的是哪个版本的 Elasticsearch?

标签: c# elasticsearch nest


【解决方案1】:

你只需要在必须的queryList中添加一个.ToArray():

desc.Query(qq => qq.Bool(b => b.Must(queryList.ToArray())));

【讨论】:

    猜你喜欢
    • 2015-04-29
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2016-07-17
    相关资源
    最近更新 更多