如何使用NEST客户端动态构建Bool查询?

时间:2016-05-05 21:51:35

标签: c# elasticsearch nest

我需要能够根据某些条件在我的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列表中。

这有意义吗?我有什么想法可以获得这个功能吗?

1 个答案:

答案 0 :(得分:1)

您只需要在must:

中的queryList中添加.ToArray()
desc.Query(qq => qq.Bool(b => b.Must(queryList.ToArray())));