【发布时间】:2016-04-02 11:27:15
【问题描述】:
我必须使用 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 AND 条件 2 或 条件 3
假设我的类名 FilterOptions 包含以下属性:
- 字段名称
- 价值
- 运算符(将组合下一个过滤器)
我将在给定的 FilterOptions 数组上循环以构建查询。
问题:
我应该使用什么来构建嵌套查询?它是一个 FilterDescriptor 以及如何将它们组合起来将嵌套查询添加到搜索方法中?
请推荐任何有价值的链接或示例?
【问题讨论】:
标签: dynamic elasticsearch nested nest booleanquery