Как вернуть только одно поле в ответе ElasticSearch - Python? - PullRequest
0 голосов
/ 15 октября 2018

Я подключаюсь к серверу AWSasticsearch и пытаюсь получить только одно поле в ответе.Кроме того, мне неизвестен формат, но я уверен, что он работает с обычными curl / postman запросами.

Код:

    import collections
    from time import sleep

    import requests

    import simplejson as json
    from aws_requests_auth.aws_auth import AWSRequestsAuth
    from elasticsearch import Elasticsearch, RequestsHttpConnection, helpers
    from pyelasticsearch import ElasticSearch, bulk_chunks

    es = ElasticSearch(urls='http://'+es_host,
                      port=80)

    auth = AWSRequestsAuth(aws_access_key='XXXXXXXX',
                   aws_secret_access_key='XXXXXXXXX',
                   aws_host=es_host,
                   aws_region='us-west-2',
                   aws_service='es')

           es_client = Elasticsearch(host=es_host,
                          port=80,

        connection_class=RequestsHttpConnection,
                          http_auth=auth)

      print (es_client.info())
      print (es_client.count(index='X_data'))
      result = es_client.search(index='X_data', body={"terms":{'field':"pid"}})
      print (result)

Это дает следующий форматошибка.Любые изменения, чтобы получить только поле PID в качестве результата?

File "/usr/local/lib/python2.7/dist-packages/elasticsearch/connection/base.py", line 105, in _raise_error
raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
elasticsearch.exceptions.RequestError: TransportError(400, u'parsing_exception')

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Используйте это:

client.search('X_data', _source=['pid'])
0 голосов
/ 15 октября 2018

Вам не хватает внешнего уровня в вашем теле.Специально для «запроса».Это должно выглядеть так:

result = es_client.search(index='X_data', body={"query": {"term":{'field':"pid"}}})
...