我必须使用 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”的书籍
- 其他条件:......
现在,嵌套查询中的过滤器应该检索书籍,如果:
条件 1和条件 2或条件 3
假设我有包含以下属性的类名 FilterOptions:
- 字段名
- 价值
- 运算符(将结合下一个过滤器)
我将在给定的 FilterOptions 数组上循环以构建查询。
问题:
我应该使用什么来构建嵌套查询?它是 FilterDescriptor 吗?如何将它们组合起来,将嵌套查询添加到搜索方法中?
请推荐任何有价值的链接或示例?