Я рассматривал эту проблему ранее сегодня, и лучшее решение, которое я мог придумать, использует следующий алгоритм (извините, на данный момент нет кода):
L is a list of known values (starts populated with the static Choice options when querying fill-in options, for example)
X is approximately the number of possible options
1. Create a query that excludes the items in L
1. Use the query to fetch X items from list (ordered as randomly as possible)
2. Add unique items to L
3. Repeat 1 - 3 until number of fetched items < X
Это значительно сократит общее количество возвращаемых товаров за счет увеличения количества запросов.
Не имеет большого значения, является ли X полностью точным, но случайность весьма важна. По сути, первый запрос может включать наиболее распространенные параметры, поэтому второй запрос исключит их и, вероятно, будет включать следующие наиболее распространенные параметры и т. Д. В ходе итераций.
В лучшем случае первый запрос включает все параметры, затем второй запрос будет пустым. (Всего найдено X элементов, более 2 запросов)
В худшем случае (например, запрос упорядочен по параметрам, которые мы ищем, и в каждом из них содержится более X элементов), мы сделаем столько запросов, сколько есть вариантов. Возврат примерно X * X элементов в общей сложности.