matrix_stats отсутствует в библиотекеasticsearch-dsl - PullRequest
0 голосов
/ 11 сентября 2018

Во время выполнения этого кода

try:
    connections.create_connection(hosts=[ES_IP], timeout=ES_TIMEOUT, http_auth=(USERNAME, PASSWORD))
    print "Connected to elasticsearch node "+ES_IP
    #logging.info("Connected to elasticsearch node "+ES_IP)
except:
    print "Connection refused by elasticsearch node "+ES_IP
    #logging.error("Connection refused by elasticsearch node "+ES_IP)
    return -1
else:
    s=Search(index = "*-indices-alias")
    a = A('matrix_stats',field=['ERABESTABADDATTNBRQCI1','ERABESTABADDATTNBRQCI6'])
    s.aggs.bucket('statistics',a)
    pprint(str(s.to_dict()))

Я получаю эту ошибку

Traceback (most recent call last):
  File "elastic_query.py", line 45, in <module>
run_agg_dsl_query()
  File "elastic_query.py", line 41, in run_agg_dsl_query
    a = A('matrix_stats',field= 
['ERABESTABADDATTNBRQCI1','ERABESTABADDATTNBRQCI6'])
  File "/usr/local/lib/python2.7/dist-packages/elasticsearch_dsl/aggs.py", line 42, in A
    return Agg.get_dsl_class(name_or_agg)(**params)
  File "/usr/local/lib/python2.7/dist-packages/elasticsearch_dsl/utils.py", line 216, in get_dsl_class
     raise UnknownDslObject('DSL class `%s` does not exist in %s.' % (name, cls._type_name))
elasticsearch_dsl.exceptions.UnknownDslObject: DSL class `matrix_stats` does not exist in agg.

Если я заменю "matrix_stats" на "term", запрос генерируется как

"{'query': {'match_all': {}}, 'aggs': {'statistics': {'terms': {'field': ['ERABESTABADDATTNBRQCI1', 'ERABESTABADDATTNBRQCI6']}}}}"

но я хочу, чтобы запрос был сгенерирован как

"{'query': {'match_all': {}}, 'aggs': {'statistics': {'matrix_stats': {'field': ['ERABESTABADDATTNBRQCI1', 'ERABESTABADDATTNBRQCI6']}}}}"

В настоящее время matrix_stats не поддерживается библиотекомasticsearch-DSL? если да, можем ли мы ожидать, что в будущем будет добавлена ​​агрегация матриц? если нет, то чего мне не хватает, так как я новичок в этом.

Любая помощь приветствуется. Спасибо,

1 Ответ

0 голосов
/ 12 сентября 2018

dsl еще не поддерживает эту агрегацию, мои извинения.Чтобы сделать его доступным, вы всегда можете определить его самостоятельно, набрав:

from elasticsearch_dsl.aggs import Agg

class MatrixStats(Agg):
    name = 'matrix_stats'

Тогда оно должно работать.

...