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

How to dynamically build up a Bool query using the NEST client?

我需要能够根据某些条件将不同的查询类型添加到我的 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 列表中的多个其他条件。

这有意义吗?我对如何获得此功能有什么想法吗?

你只需要在 must:

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