@bujanov

Как отфильтровать вложенный object в ES?

Всем привет.
Как отфильтровать вложенный object в ES?

Есть например 3 товара с опциями.
{
  name: "Product 1",
  price: 10.00
  options: [
      {
        value: "red",
        option: {
          name: "color"
        }
      },
      {
        value: "square",
        option: {
          name: "figure"
        }
      },
      {
        value: 100,
        option: {
          name: "height"
        }
      }
    ]
},
{
  name: "Product 2",
  price: 20.00
  options: [
      {
        value: "black",
        option: {
          name: "color"
        }
      },
      {
        value: "circle",
        option: {
          name: "figure"
        }
      },
      {
        value: 200,
        option: {
          name: "height"
        }
      }
    ]
},
{
  name: "Product 3",
  price: 30.00
  options: [
      {
        value: "blue",
        option: {
          name: "color"
        }
      },
      {
        value: "triangle",
        option: {
          name: "figure"
        }
      },
      {
        value: 300,
        option: {
          name: "height"
        }
      }
    ]
}


Мне нужно получить список цветов. Т.е. массив с ["red", "black", "blue"]

Делаю запрос
{
  "query": {
    "bool": {
      "filter": [
        /** Тут дополнительные фильтры **/
      ]
    }
  },
  "aggs": {
    "list": {
      "terms": {
        "field": "options.value"
      }
    }
  }
}


Естественно получаю массив ["red", "square", 100, "black", ... 300]

Как мне получить только нужные значения? Перепробовал уже всё!
3-е суток не сплю, глотаю валерьянку и запеваю кофе :)

Растолкуйте пожалуйста.
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
https://www.elastic.co/guide/en/elasticsearch/refe... так примерно.
Единственно, хорошо бы ваш options сделать nested, иначе фильтр может не сработать правильно, так как после фильтра будут браться ВСЕ значения options.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы