_type
メタフィールドでは、他のフィールドでクエリを照会するのとほぼ同じ方法でクエリできます。 1件の検索クエリ内のタイプに基づいて異なるクエリを実行するには、複数の節
client.Search<ISearchDto>(s => s
.From(from)
.Size(pageSize)
.Type(Types.Type(typeof(FirstSearchDto), typeof(SecondSearchDto)))
.Query(q => q
.Bool(b => b
.Should(sh => sh
.Bool(bb => bb
.Filter(
fi => fi.Term("_type", "firstSearchDto"),
fi => fi.Term(f => f.X, 1)
)
), sh => sh
.Bool(bb => bb
.Filter(
fi => fi.Term("_type", "secondSearchDto"),
fi => fi.Term(f => f.Y, 1)
)
)
)
)
)
);
我々は2つの
should
句を持つ
bool
クエリを持っていると
bool
クエリを使用することができます。各
should
句は、というクエリであり、2つの
filter
句が1つずつあります.1つは
_type
、もう1つは各タイプのクエリのプロパティです。
NESTので、このクエリは
client.Search<ISearchDto>(s => s
.From(from)
.Size(pageSize)
.Type(Types.Type(typeof(FirstSearchDto), typeof(SecondSearchDto)))
.Query(q => (+q
.Term("_type", "firstSearchDto") && +q
.Term(f => f.X, 1)) || (+q
.Term("_type", "secondSearchDto") && +q
.Term(f => f.Y, 1))
)
);
どちらも次のクエリ
{
"from": 0,
"size": 20,
"query": {
"bool": {
"should": [
{
"bool": {
"filter": [
{
"term": {
"_type": {
"value": "firstSearchDto"
}
}
},
{
"term": {
"x": {
"value": 1
}
}
}
]
}
},
{
"bool": {
"filter": [
{
"term": {
"_type": {
"value": "secondSearchDto"
}
}
},
{
"term": {
"y": {
"value": 1
}
}
}
]
}
}
]
}
}
}
を生成して、より簡潔に書くことができる演算子オーバーロードをサポートしています