Modelando relações pai / filho (variante produto / produto) no Elasticsearch

Rompendo minha cabeça na modelagem de variantes de produto usando ES (ou Solr para esse assunto)

Considere (exemplo inventado):

produtos diferentes (digamos camisetas)cada produto tem um conjunto de propriedades (productid, name, desc, brand, color, popularity)cada produto tem um conjunto de variantes de produto com propriedades (productvariantid (combi de productid ++ size), productid, size, availability, price)

Esta parece ser uma relação pai / filho padrão entre produto e produtovariante. Então eu gostaria de modelar assim no ES.

Eu gostaria de poder fazer o seguinte:

A. Consulta para productvariants (e retorna todas as propriedades). Não há necessidade de devolver as propriedades do produto, as propriedades de variância do produto são suficientes.

B. Cada consulta de usuário é restrita para que no máximo 1 produto variante corresponda por produto (no exemplo acima isso significa que restringimos em productvariant.size)

C. filtrar no preço.

D. filtrar em algumas propriedades do produto

E. ordem no preço

F. ordem na propriedade do produto, como popularidade, ou uma combinação do 2.

Faceta G. em productvariant.price

Faceta H. em múltiplas propriedades do produto (o pai)

Fazendo isso com documentos pai / filho ehas_parent no ES:A-E + G e possivel.

No entanto, que talF eH? Eu olhei para as coisas como_scope para facetas (embora eu admito que não aproveito as possibilidades 100%) e todas as outras coisas que me vêm à mente, mas não vejo uma solução óbvia para mostrar as facetas das propriedades do produto e ser capaz de classificá-las em conjunto comhas_parent .

Eu tentei outras coisas (em papel) - has_child -> nenhuma sorte precisa de informações variáveis ​​retornadas - documentos incorporados (variante dentro do produto) e retorne todo o produto com todas as variantes. Apenas parece desajeitado. Além disso, tenho certeza de que não posso dar conta / ordenar o preço dessa maneira.

Ajuda muito apreciada

questionAnswers(1)

yourAnswerToTheQuestion