Как уже упоминалось @jaspreet, результат ожидаемый. Чтобы уточнить это далее, вы можете использовать параметр inner_hits
для извлечения только тех вложенных вложенных документов properties
, которые фактически соответствуют обоим запросам, то есть:
{
"_source": "inner_hits", <---- hiding the default response
"query": {
"bool": {
"must": [
{
"nested": {
"query": {
"bool": {
"must": [
{
"bool": {
"must_not": [
{
"exists": {
"field": "properties.propertyDateValue"
}
}
]
}
},
{
"term": {
"properties.propertyName": {
"value": "Product expiration date"
}
}
}
]
}
},
"path": "properties",
"inner_hits": {} <----- needs to be here
}
}
]
}
}
}
, что дает
[
{
"_index" : "mich",
"_type" : "_doc",
"_id" : "6iLSVHEBZbobBB0NSl9x",
"_score" : 0.6931472,
"_source" : { },
"inner_hits" : {
"properties" : {
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.6931472,
"hits" : [
{
"_index" : "mich",
"_type" : "_doc",
"_id" : "6iLSVHEBZbobBB0NSl9x",
"_nested" : {
"field" : "properties",
"offset" : 1
},
"_score" : 0.6931472,
"_source" : {
"propertyBooleanValue" : null,
"propertyName" : "Product expiration date",
"propertyDateValue" : null,
"propertyType" : "DATE",
"languageCode" : null,
"propertyNumericValue" : null
}
}
]
}
}
}
},
...
]
вероятно, это то, что вы искали.
Имейте в виду, что приведенный выше запрос отличается от следующего, когда у вас есть два отдельных условия bool-must, которые игнорируют соединение AND по сравнению с первым запросом , В этом случае inner_hits
потребуется уникальное имя.
{
"_source": "inner_hits",
"query": {
"bool": {
"must": [
{
"nested": {
"path": "properties",
"query": {
"bool": {
"must": [
{
"bool": {
"must_not": [
{
"exists": {
"field": "properties.propertyDateValue"
}
}
]
}
}
]
}
},
"inner_hits": {
"name": "NULL_propertyDateValue"
}
}
},
{
"nested": {
"path": "properties",
"query": {
"bool": {
"must": [
{
"term": {
"properties.propertyName": {
"value": "Product expiration date"
}
}
}
]
}
},
"inner_hits": {
"name": "MATCH_IN_propertyName"
}
}
}
]
}
}
}
Короче говоря, go с первым запросом и не стесняйтесь ограничивать возвращаемый ответ с помощью inner_hits
.