Я думаю, вам следует попробовать следующее:
“[doc['request.keyword'].value + ' ' + doc['user.keyword']].value”
Это вычислит хэши поля, которые будут объединенной строкой из двух значений - запроса и пользователя
Caveat. - это будет значительным ударом по производительности, так как он вычисляет и извлекает значения полей на лету
Одной из возможностей избежать этого будет изменение процесса индексации для создания этого синтетического поля, являющегося конкатенацией, поэтому позже Вы можете использовать обычное агрегирование кардинальности, а не сценарий.
Что "случайное является десятичным"? Десятичные числа имеют произвольную точность, таким образом генерируя число с такой случайностью, как можно держать в Десятичном числе, взял бы всю память машины для хранения.
Необходимо знать, сколько десятичных цифр точности Вы хотите в своем случайном числе, в которой точке легко просто захватить случайное целое число и разделить его. Например, если Вы хотите две цифры выше точки и две цифры в части (см. randrange здесь):
decimal.Decimal(random.randrange(10000))/100
Из стандартного справочного руководства по библиотеке:
Для создания Десятичного числа из плавания сначала преобразуйте его в строку. Это служит явным напоминанием деталей преобразования (включая ошибку представления).
>>> import random, decimal
>>> decimal.Decimal(str(random.random()))
Decimal('0.467474014342')
Это то, что Вы имеете в виду? Это не походит на лаваш мне. Можно масштабировать его в любой диапазон и точность, которую Вы хотите.
Если Вы знаете, сколько цифр Вы хотите, после и перед запятой, можно использовать:
>>> import decimal
>>> import random
>>> def gen_random_decimal(i,d):
... return decimal.Decimal('%d.%d' % (random.randint(0,i),random.randint(0,d)))
...
>>> gen_random_decimal(9999,999999) #4 digits before, 6 after
Decimal('4262.786648')
>>> gen_random_decimal(9999,999999)
Decimal('8623.79391')
>>> gen_random_decimal(9999,999999)
Decimal('7706.492775')
>>> gen_random_decimal(99999999999,999999999999) #11 digits before, 12 after
Decimal('35018421976.794013996282')
>>>
Случайный модуль имеет больше для предложения, чем "только возвращающиеся плавания", но так или иначе:
from random import random
from decimal import Decimal
randdecimal = lambda: Decimal("%f" % random.random())
Или я пропускал что-то очевидное в Вашем вопросе?