'elastic search custom sorting by script sorting or custom fields or run time

I have products in an elastic search and I want to sort products such as

first display one product from each brand and then next round of each product. if product is completed from the any brand then that brand will skip.

So, first pick one product from each brand then again one next product from each brand and go on till all the products are not completed and it is by pagination. example is given below.

Available products in brand as below

product name brand id brand name
product 1 1 brand 1
product 2 1 brand 1
product 3 2 brand 2
product 4 3 brand 3
product 5 7 brand 7
product 6 10 brand 10
product 7 1 brand 1
product 8 2 brand 2
product 9 5 brand 5
product 10 10 brand 10
product 11 2 brand 2
product 12 2 brand 2
product 13 3 brand 3
product 14 3 brand 3
product 15 4 brand 4
product 16 5 brand 5
product 17 10 brand 10
product 18 7 brand 7
product 19 7 brand 7
product 20 8 brand 8
product 21 8 brand 8
product 22 2 brand 2
product 23 1 brand 1
product 24 1 brand 1
product 25 2 brand 2
product 26 4 brand 4
product 27 4 brand 4
product 28 6 brand 6
product 29 11 brand 11
product 30 11 brand 11
product 31 7 brand 7
product 32 9 brand 9
product 33 2 brand 2
product 34 1 brand 1
product 35 3 brand 3
product 36 10 brand 10
product 37 4 brand 4

Expected output

Page 1

product name brand id brand name
product 1 1 brand 1
product 3 2 brand 2
product 4 3 brand 3
product 15 4 brand 4
product 9 5 brand 5
product 28 6 brand 6
product 5 7 brand 7
product 20 8 brand 8
product 32 9 brand 9
product 6 10 brand 10
product 29 11 brand 11
product 2 1 brand 1
product 8 2 brand 2
product 13 3 brand 3
product 26 4 brand 4

Page 2

product name brand id brand name
product 16 5 brand 5
product 18 7 brand 7
product 21 8 brand 8
product 10 10 brand 10
product 30 11 brand 11
product 7 1 brand 1
product 11 2 brand 2
product 14 3 brand 3
product 27 4 brand 4
product 19 7 brand 7
product 17 10 brand 10
product 23 1 brand 1
product 12 2 brand 2
product 35 3 brand 3
product 37 4 brand 4

Page 3

product name brand id brand name
product 31 7 brand 7
product 36 10 brand 10
product 24 1 brand 1
product 22 2 brand 2
product 34 1 brand 1
product 25 2 brand 2
product 33 2 brand 2

more and detailed example data added in below link https://docs.google.com/spreadsheets/d/1UAbnqolfHk5uBQQrS603DOFSjOloztH3tsYv6rSHFPY/edit?usp=sharing



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source