python - RequestError:TransportError(400,u'parsing_exception')Django干草堆

标签 python elasticsearch django-haystack drf-haystack

我正在尝试将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',
]

但是,每当我尝试将rebuild_index作为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,但仍然遇到上面的错误。

谁能让我知道如何解决这个问题?

最佳答案

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

安装后,请确保elasticsearch版本为1.x.y(也可以使用2.x.y),否则将Elasticsearch降级至<2.0.0,您可以通过requirements.txt或其他方式进行。

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

更重要的是,您是否启动了Elasticsearch服务器?还要检查docs

让我知道这个是否奏效。

关于python - RequestError:TransportError(400,u'parsing_exception')Django干草堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42921006/

相关文章:

python - 将flask api封装在类中以供测试

Python:从 1+ 级别向下导入

python - 试图找出为什么我在第 12 行收到打印语法错误

python - 有没有办法将SearchQuerySet 转换为objects.filter 返回的类型? - Django

Django-Haystack: 'NoneType' 对象没有属性 '_default_manager'

python - 在 django 中显示来自 tweepy python 文件的数据

Elasticsearch - 以聚合方式 Lsit 整个对象

elasticsearch - ElasticSearch衰减最小值

django - 干草堆:仅突出显示一个字段

Django haystack,搜索中某些字段的优先级