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 配列をループして、クエリを作成します。
質問:
ネストされたクエリを作成するには何を使用すればよいですか? それは FilterDeciptor ですか?それらを組み合わせる方法は、ネストされたクエリを検索メソッドに追加しますか?
貴重なリンクや例をお勧めしてください。