Задать вопрос
@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-е суток не сплю, глотаю валерьянку и запеваю кофе :)

Растолкуйте пожалуйста.
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл Python-разработчик
    6 месяцев
    Далее
  • Merion Academy
    Курс по NoSQL. Нереляционные базы данных
    1 месяц
    Далее
  • Яндекс Практикум
    Аналитик SOC
    4 месяца
    Далее
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
https://www.elastic.co/guide/en/elasticsearch/refe... так примерно.
Единственно, хорошо бы ваш options сделать nested, иначе фильтр может не сработать правильно, так как после фильтра будут браться ВСЕ значения options.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы