@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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 300 000 до 500 000 ₽
от 1 000 000 до 1 200 000 ₽
Сима-ленд Екатеринбург
от 120 000 до 250 000 ₽
25 апр. 2024, в 16:12
2000 руб./за проект
25 апр. 2024, в 16:08
130000 руб./за проект