Как фильтровать только внутренние объекты на основе определенных условий. Например, у меня есть продукты, хранящиеся в ES. На основе определенных полей я хочу запросить продукты, например, модель и некоторые другие условия. Но я хочу перечислить имя и описание результатов запроса только в переданном языковом значении.
Схема выглядит следующим образом
PUT /product/
{"mappings":{"productTypeA":{"dynamic":"strict","properties":{"id":{"type":"keyword"},"model":{"type":"keyword"},"version":{"type":"keyword"},"launchDate":{"type":"date","format":"yyyyMMdd'T'HHmmss.SSSZ","fields":{"keyword":{"type":"keyword"}}},"names":{"type":"object","properties":{"locale":{"type":"keyword"},"value":{"type":"keyword"}}},"descriptions":{"type":"object","properties":{"locale":{"type":"keyword"},"value":{"type":"keyword"}}}}}}}
Мой продукт 1
POST /product/productTypeA/1
{"id":"1","model":"modelA","version":"1.0","launchDate":"20190924T175212.057+0000","names":[{"locale":"en","value":"product one"},{"locale":"fr","value":"produit un"},{"locale":"de","value":"Produkt eins"}],"descriptions":[{"locale":"en","value":"product one description"},{"locale":"fr","value":"description du produit un"},{"locale":"de","value":"Produkt eins Beschreibung"}]}
Мой продукт2
POST /product/productTypeA/2
{"id":"2","model":"modelA","version":"1.0","launchDate":"20190924T175212.057+0000","names":[{"locale":"en","value":"product two"},{"locale":"fr","value":"produit deux"},{"locale":"de","value":"Produkt zwei"}],"descriptions":[{"locale":"en","value":"product two description"},{"locale":"fr","value":"description du produit deux"},{"locale":"de","value":"Produkt zwei Beschreibung"}]}
Я попытался post_filter для запроса следующим образомна нижеуказанные данные о продуктах
GET /product/productTypeA/_search
{"query":{"bool":{"must":[{"term":{"model":"modelA"}}]}},"post_filter":{"bool":{"should":{"term":{"names.locale":"fr"}}}}}
Но мои результаты имеют названия и описания на всех языках, где, как я ожидаю, они для каждого результата запроса только на французском языке
{"took":1,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":2,"max_score":0.2876821,"hits":[{"_index":"product","_type":"productTypeA","_id":"2","_score":0.2876821,"_source":{"id":"2","model":"modelA","version":"1.0","launchDate":"20190924T175212.057+0000","names":[{"locale":"en","value":"product two"},{"locale":"fr","value":"produit deux"},{"locale":"de","value":"Produkt zwei"}],"descriptions":[{"locale":"en","value":"product two description"},{"locale":"fr","value":"description du produit deux"},{"locale":"de","value":"Produkt zwei Beschreibung"}]}},{"_index":"product","_type":"productTypeA","_id":"1","_score":0.2876821,"_source":{"id":"1","model":"modelA","version":"1.0","launchDate":"20190924T175212.057+0000","names":[{"locale":"en","value":"product one"},{"locale":"fr","value":"produit un"},{"locale":"de","value":"Produkt eins"}],"descriptions":[{"locale":"en","value":"product one description"},{"locale":"fr","value":"description du produit un"},{"locale":"de","value":"Produkt eins Beschreibung"}]}}]}}