Я пытаюсь использовать библиотеку elasticsearch-dsl, но, к сожалению, это не очень хорошо документировано.elasticsearch-dsl - Среднее значение сбора совокупных значений в python
У меня есть следующий фильтр, который работает.
Сначала я нахожу, как далеко назад мне нужен мой поиск.
longtime = datetime.datetime.strptime(str(datetime.datetime.now() - datetime.timedelta(seconds=int(pairs[p][1]) + basehrs)), '%Y-%m-%d %H:%M:%S.%f').strftime('%s.%f')
Тогда я бегу мой поиск с фильтром
s = Search(using=es, index="history", doc_type=pairs[p][0]).filter('range', timestamp={'gte': longtime})
После этого мне нужно запустить некоторые Aggs. У меня есть следующий, но он не работает:
s = s.aggs.bucket('average', 'avg', field='ask')
Он просто возвращается обратно:
Avg (поле = «спросить»)
мне нужно это сделать забавный расчет, не просто что-то прямое. Мне нужно спросить + (распространяется/2)
т.е.
s = s.aggs.bucket ('средний', 'средний', поле = 'спрашивать + (распространяется/2')
ли у кого есть какие-то идеи?
В то время как мы здесь, мне нужно, чтобы спред целочисленного типа, в настоящее время это строка. Я использовал python для создания индекса в первую очередь, я рад удалить свой индекс и начните снова, но я не знаю, как указать тип поля в python, когда он будет создан.
Привет, друг, я ценю помощь. Я играю с этим в течение нескольких часов, и я не могу добиться этого. Я получаю: '{'query': {'bool': {'filter': [{'range': {'timestamp': {'gt': '1484749397.311207'}}}]}}, ' aggs ': {' average ': {' avg ': {' script ': {' inline ':' doc ["ask"]. value + doc ["spread"]. значение/2 '}}}},' sort_keys ': True,' size ': 50000} ' вернулся, когда я печатаю dict. –
О, пожалуйста, просто переходите к датам, не нужно сериализовывать их в метку времени. Если вы выполните сериализацию, убедитесь, что они совместимы с elasticsearch, который использует миллисекундную точность ('timestamp * 1000' в python). –