我必须使用 Nest 查询嵌套对象,但是查询是以动态方式构建的。下面的代码演示了以静态方式对嵌套“书籍”进行查询
QueryContainer qry;
qry = new QueryStringQuery()
{
DefaultField = "name",
DefaultOperator = Operator.And,
Query = "salman"
};
QueryContainer qry1 = null;
qry1 = new RangeQuery() // used to search for range ( from , to)
{
Field = "modified",
GreaterThanOrEqualTo = Convert.ToDateTime("21/12/2015").ToString("dd/MM/yyyy"),
};
QueryContainer all = qry && qry1;
var results = elastic.Search<Document>(s => s
.Query(q => q
.Bool(qb => qb
.Must(all)))
.Filter(f =>
f.Nested(n => n
.Path("books")
.Filter(f3 => f3.And(
f1 => f1.Term("book.isbn", "122"),
f2 => f2.Term("book.author", "X"))
)
)
)
);
问题是我需要以动态方式组合“书籍”的多个查询(使用 And、OR 运算符)。例如,获取满足以下条件的书籍:
- 条件 1:作者为“X”且 isbn“1”的书籍
- 条件 2:作者为“X”且 isbn“2”的书籍
- 条件 3:作者为“Z”且 isbn“3”的书籍
- 其他条件: .....
现在,嵌套查询中的过滤器应该在以下情况下检索书籍:
条件1AND条件2Or条件3
假设我的类名 FilterOptions 包含以下属性:
- 字段名
- Value
- 运算符(将组合下一个过滤器)
我将循环给定的 FilterOptions 数组来构建查询。
问题:
我应该使用什么来构建嵌套查询?它是 FilterDeciptor 吗?如何组合它们将嵌套查询添加到搜索方法中?
请推荐任何有价值的链接或示例?