如何使用 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())));
我需要能够根据某些条件将不同的查询类型添加到我的 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())));