【问题标题】:RequestError: TransportError(400, u'parsing_exception') django haystackRequestError: TransportError(400, u'parsing_exception') django haystack
【发布时间】:2017-03-21 07:44:13
【问题描述】:

我正在尝试将 django-haystack 与 djangorestframework 和 elasticsearch 一起使用,并遵循教程 here

我在我的虚拟环境中安装了以下软件包

djangorestframework==3.5.4
drf-haystack==1.6.1
elasticsearch==1.5.0

干草堆设置

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://127.0.0.1:9200/',
        'INDEX_NAME': 'haystack',
    },
}

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
    ),
}

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'drf',
    'haystack',
    'rest_framework',
    'rest_framework.authtoken',
]

但是,每当我尝试以 python manage.py rebuild_inex 的形式重建索引时,或者每当我尝试使用 http://localhost:8000/api/v1/location/search/?city=Hyderabad 的 API 检索结果时,我都会收到以下错误,我已经在 Google 上搜索了很多相关信息,但无法获得任何信息帮助

Failed to query Elasticsearch using 'city:(Hyderabad)': TransportError(400, u'parsing_exception')
Traceback (most recent call last):
  File "/Users/shivakrishna/.virtualenvs/ipitch/lib/python2.7/site-packages/haystack/backends/elasticsearch_backend.py", line 524, in search
    _source=True)
  File "/Users/shivakrishna/.virtualenvs/ipitch/lib/python2.7/site-packages/elasticsearch/client/utils.py", line 69, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/Users/shivakrishna/.virtualenvs/ipitch/lib/python2.7/site-packages/elasticsearch/client/__init__.py", line 504, in search
    params=params, body=body)
  File "/Users/shivakrishna/.virtualenvs/ipitch/lib/python2.7/site-packages/elasticsearch/transport.py", line 307, in perform_request
    status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
  File "/Users/shivakrishna/.virtualenvs/ipitch/lib/python2.7/site-packages/elasticsearch/connection/http_urllib3.py", line 89, in perform_request
    self._raise_error(response.status, raw_data)
  File "/Users/shivakrishna/.virtualenvs/ipitch/lib/python2.7/site-packages/elasticsearch/connection/base.py", line 105, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
RequestError: TransportError(400, u'parsing_exception')

我已经读过一些上面的错误是因为 elasticsearch 版本超过 2.0.0,但我已经安装了 1.5.0,但我仍然面临上述错误。

谁能告诉我如何解决这个问题?

【问题讨论】:

  • 我也遇到了同样的问题。你找到解决办法了吗?

标签: python elasticsearch django-haystack drf-haystack


【解决方案1】:

当涉及到 Django-Python 时,Elasticsearch 有一些依赖项。请安装 pyelasticsearch,它将安装所有依赖项,例如 urllib3、elasticsearch 等。

确保安装后elasticsearch版本为1.x.y(2.x.y也可以),否则将elasticsearch降级为requirements.txt或其他方式进行。

另外,请检查并在http://127.0.0.1:9200/ 上发布查询结果,因为这将显示您系统上的elasticsearch 版本。我认为这应该是问题,因为您附加的日志显示了与版本问题相关的错误,这几天我也面临。

更重要的是,你启动了elasticsearch服务器了吗?也请检查docs

让我知道这是否有效。

【讨论】:

  • 我已经尝试降级elasticsearch,但错误仍然存​​在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 2017-01-22
  • 2015-02-01
  • 2020-06-06
  • 1970-01-01
相关资源
最近更新 更多