Понял это. This было вдохновением, в частности, ответом, предлагающим использовать Function Queries.
Используя те же данные в вопросе, я добавлю вычисленные поля в мои документы, которые содержат количество значений в моем многозначном поле.
id: 1
multifield: 2, 5
nummultifield: 2
id: 2
multifield: 2, 5, 9
nummultifield: 3
Тогда я буду использовать frange с некоторыми функциональными запросами. Для каждого элемента в моем наборе я буду использовать функцию termfreq, которая вернет 1 или 0. Затем я суммирую все эти значения. Наконец, если эта сумма равна расчетному полю nummultifield, то я знаю, что для этого документа каждое значение в документе присутствует в наборе. Помните мой набор является 2,5,7 поэтому моя функция запроса будет выглядеть следующим образом:
fq={!frange l=0 u=0}sub(nummultifield, sum(termfreq(multifield,2), termfreq(multifield,5), termfreq(multifield,7)))
Если мы заполняем значения для документа 1 и 2, будет выглядеть следующим образом:
Document 1: sub(2, sum(1,1,0)) = 0 ' in my range of {0,0} so Doc 1 is returned
Document 2: sub(3, sum(1,1,0)) = 1 ' not in the range of {0,0} so not returned
Я проверил его, и он отлично работает. Вам нужно убедиться, что вы не дублируете какие-либо значения в multifield или получите странные результаты. Кстати, этот трюк использования frange можно использовать всякий раз, когда вы хотите подделать логический результат из одного или нескольких функциональных запросов.
Как вы получили динамическое поле, чтобы вернуть число значений в многозначном поле? – iwayneo
Не динамическое поле, оно поддерживается вручную. Уродливый, но эффективный – brian519
Это то, с чем я закончил. Это хорошо работает, так что все хорошо :) – iwayneo