У меня есть «вложенное» отображение, например, так:
"stringAttributes":{
"type":"nested",
"properties":{
"Name":{
"type":"keyword"
},
"Value":{
"type":"keyword"
}
}
},
, и поэтому у меня есть документы, такие как:
stringAttributes:[
{
Name:"supplier",
Value:"boohoo"
},
{
Name:"brand",
Value:"gucci"
},
{
Name:"primaryColour",
Value:"black"
},
{
Name:"secondaryColour",
Value:"green"
},
{
Name:"size",
Value:"12"
}
]
При построении многогранного поиска я считаю, что мне нужна глобальная агрегация.Т.е. когда поставщик фильтруется пользователем, результирующий набор не будет содержать документы от других поставщиков, поэтому обычная агрегация не будет содержать других поставщиков.
Запрос может включать в себя следующие пункты:
"must": [
{
"nested": {
"path": "stringAttributes",
"query": {
"bool": {
"must": [
{
"term": {
"stringAttributes.Name": "supplier"
}
},
{
"terms": {
"stringAttributes.Value": [
"boohoo"
]
}
}
]
}
}
}
},
{
"nested": {
"path": "stringAttributes",
"query": {
"bool": {
"must": [
{
"term": {
"stringAttributes.Name": "brand"
}
},
{
"terms": {
"stringAttributes.Value": [
"warehouse"
]
}
}
]
}
}
}
}
]
Так что в этом случае мне нужно глобальное агрегирование, которое затем фильтруется всеми другими применяемыми фильтрами (например, по бренду), которые будут возвращатьдругие поставщики, которых можно было бы выбрать с учетом этих других фильтров.
Это то, что я имею до сих пор.Однако он возвращает «глобальные» нефильтрованные результаты.На данный момент я полностью в замешательстве.
{
"global":{},
"aggs":{
"inner":{
"filter":{
"nested":{
"query":{
"bool":{
"filter":[
{
"term":{
"stringAttributes.Name":{
"value":"brand"
}
}
},
{
"terms":{
"stringAttributes.Value":[
"warehouse"
]
}
}
]
}
},
"path":"stringAttributes"
}
}
},
"aggs":{
"nested":{
"path":"stringAttributes"
},
"aggs":{
"aggs":{
"filter":{
"match":{
"stringAttributes.Name":"supplier"
}
},
"aggs":{
"facet_value":{
"terms":{
"size":1000,
"field":"stringAttributes.Value"
}
}
}
}
}
}
}
}
Есть предложения по фильтрации глобальной агрегации с вложенными атрибутами?Я прочитал много документации по различным ответам на SO, но все еще не могу понять, почему этот конкретный agg не фильтруется.