Разделение попаданий, возвращаемых из резины, по значению вложенного поля - PullRequest
1 голос
/ 22 мая 2019

У меня есть индекс с продуктами там.Я пытаюсь отделить попадания, возвращаемые от упругих, по значению вложенного поля.Вот мой сокращенный индекс:

{
  "mapping": {
    "product": {
      "properties": {        
        "id": {
          "type": "integer"
        },
        "model_name": {
          "type": "text",          
        },
        "variants": {
          "type": "nested",
          "properties": {
            "attributes": {
              "type": "nested",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "name": {
                  "type": "text"
                },
                "product_attribute_id": {
                  "type": "integer"
                },               
                "value": {
                  "type": "text"
                }
              }
            },
            "id": {
              "type": "integer"
            },
            "product_id": {
              "type": "integer"
            }            
          }
        }
      }
    }
  }
}

И пример продукта (в продукте больше вариантов и атрибутов - я их просто обрезал):

{
   "_index":"product_index",
   "_type":"product",
   "id":192,
   "model_name":"Some tshirt",
   "variants":[
      {
         "id":1271,
         "product_id":192,
         "attributes":[
            {
               "id":29,
               "name":"clothesSize",
               "value":"XL",
               "product_attribute_id":36740
            }
         ]
      },
      {
         "id":1272,
         "product_id":192,
         "attributes":[
            {
               "id":29,
               "name":"clothesSize",
               "value":"L",
               "product_attribute_id":36741
            }
         ]
      }
   ]
} 

Поле, о котором идет речь, - это идентификатор атрибута.,Допустим, я хочу разделить продукты по атрибуту размера - id 29. Было бы идеально, если бы ответ выглядел следующим образом:

"hits" : [
{
   "_index":"product_index",
   "_type":"product",
   "id":192,
   "model_name":"Some tshirt",
   "variants":[
      {
         "id":1271,
         "product_id":192,
         "attributes":[
            {
               "id":29,
               "name":"clothesSize",
               "value":"XL",
               "product_attribute_id":36740
            }
         ]
      }
   ]
},     
{
   "_index":"product_index",
   "_type":"product",
   "id":192,
   "model_name":"Some tshirt",
   "variants":[      
      {
         "id":1272,
         "product_id":192,
         "attributes":[
            {
               "id":29,
               "name":"clothesSize",
               "value":"L",
               "product_attribute_id":36741
            }
         ]
      }
   ]
}]

Я думал об отделении всех вариантов в эластичном запросе, а затем сгруппировал их на стороне приложения.по этим признакам, но я думаю, что это не самый элегантный и, прежде всего, эффективный способ.
Какие эластичные ключевые слова мне интересны?
Заранее благодарю за помощь.

...