TL; DR
Nest создает дополнительный внутренний Bool.Match
, когда я пытаюсь сопоставить более чем одну вещь в предложении should
(в контексте bool)
Ожидается - Запрос
Я использую Nest 5.6.1 и пытаюсь написать следующий запрос:
{
"query": {
"bool": {
"minimum_should_match": 2,
"should": [
{
"exists": {
"field": "B"
}
},
{
"exists": {
"field": "A"
}
},
{
"match": {
"fields.MachineName": "MY_Machine"
}
}
],
"filter": [
{
"range": {
"@timestamp": {
"gte": "2018-09-03T00:00:00",
"lt": "2018-09-04T00:00:00"
}
}
}
]
}
}
}
Что я пробовал
Я пытался добиться этого следующим образом:
var searchResponse = connection.Search<ExcludedCusipsStructLog>(sd => sd
.Index(DefaultIndex)
.From(0)
.Size(1000)
.Type(LogType.ProxyLog)
.Query(q => q
.Bool(b => b
.Should(sh => sh
.Exists(e => e
.Field(fi => fi.A)
)
&& sh
.Exists(e => e
.Field(fi => fi.B)
)
&& sh
.Match(ma => ma
.Field(f => f.MachineName)
.Query("MY_Machine")
)
)
.MinimumShouldMatch(2)
.Filter(fi => fi
.DateRange(r => r
.Field(f => f.Timestamp)
.GreaterThanOrEquals(dateToSearch)
.LessThan(dateToSearch.AddDays(1))
)
)
)
)
);
Фактический результат
Проблема в том, что гнездо генерирует этот запрос:
{
"from": 0,
"size": 1000,
"query": {
"bool": {
"should": [{
"bool": {
"must": [{
"exists": {
"field": "fields.invalidPositionList"
}
}, {
"exists": {
"field": "fields.excludedCusips"
}
}, {
"match": {
"fields.MachineName": {
"query": "GSMSIMPAPUA01"
}
}
}]
}
}],
"filter": [{
"range": {
"@timestamp": {
"gte": "2018-09-06T00:00:00",
"lt": "2018-09-07T00:00:00"
}
}
}],
"minimum_should_match": 2
}
}
}
Подробнее
Я также понял, что если я смотрю только одно поле в предложении Следует - Nest создает хороший запрос - что заставляет меня думать, что я должен добавить дополнительные поля другим способом (который я не нашел)