私は今日、この問題を検討していましたが、考えられる最善の解決策は次のアルゴリズムを使用することです (申し訳ありませんが、現時点ではコードはありません)。
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 が完全に正確かどうかは問題ではありませんが、ランダム性は非常に重要です。基本的に、最初のクエリには最も一般的なオプションが含まれる可能性が高いため、2 番目のクエリではこれらのオプションが除外され、2 番目に一般的なオプションが含まれる可能性が高くなります。
最良の場合、最初のクエリにすべてのオプションが含まれ、2 番目のクエリは空になります。(2 回のクエリで合計 X 個のアイテムが取得されました)
最悪の場合 (例: 探しているオプションによってクエリが順序付けられ、各オプションに X 個以上の項目がある場合)、オプションと同じ数のクエリを作成します。合計で約 X * X 個のアイテムを返します。