当前位置: 首页 > 面试题库 >

Django/ Haystack错误:elasticsearch.exceptions.RequestError:TransportError(400,'parsing_exception',…)

陆宾白
2023-03-14
问题内容

我在我的Django项目中使用Elasticsearch作为干草堆的后端。我创建了一个搜索如前所述所需的一切在这里。但是,当我搜索时,我抛出了带有TransportError(400,’parsing_exception’,’没有为[过滤器]注册的[查询]’)的追溯错误。

我已经用谷歌搜索了这个问题。但是没有任何解决方案。我很乐意帮助我解决这个问题。

我的回溯:

Traceback (most recent call last):
  File "c:\python34\lib\site- packages\haystack\backends\elasticsearch_backend.py", line 524, in search
_source=True)
  File "c:\python34\lib\site-packages\elasticsearch\client\utils.py", line 71, in _wrapped
    return func(*args, params=params, **kwargs)
  File "c:\python34\lib\site-packages\elasticsearch\client\__init__.py", line 569, in search
    doc_type, '_search'), params=params, body=body)
 File "c:\python34\lib\site-packages\elasticsearch\transport.py", line 327, in perform_request
   status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
  File "c:\python34\lib\site-packages\elasticsearch\connection\http_urllib3.py", line 124, in perform_request
    self._raise_error(response.status, raw_data)
  File "c:\python34\lib\site-packages\elasticsearch\connection\base.py", line 122, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
elasticsearch.exceptions.RequestError: TransportError(400,  'parsing_exception', 'no [query] registered for [filtered]')
[28/Dec/2016 17:06:58]"GET /search/?q=code HTTP/1.1" 200 395

Update-1:降级为Elasticsearch == 1.7.0后的TraceBack

GET /haystack/modelresult/_search?_source=true [status:400 request:0.001s]
Failed to query Elasticsearch using '(code)': TransportError(400, 'parsing_exception')
Traceback (most recent call last):
  File "c:\python34\lib\site-packages\haystack\backends\elasticsearch_backend.py", line 524, in search
_source=True)
  File "c:\python34\lib\site-packages\elasticsearch\client\utils.py", line 69, in _wrapped
    return func(*args, params=params, **kwargs)
  File "c:\python34\lib\site-packages\elasticsearch\client\__init__.py", line 527, in search
    doc_type, '_search'), params=params, body=body)
  File "c:\python34\lib\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 "c:\python34\lib\site-packages\elasticsearch\connection\http_urllib3.py", line 93, in perform_request
    self._raise_error(response.status, raw_data)
  File "c:\python34\lib\site-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, 'parsing_exception')
[28/Dec/2016 17:58:50]"GET /search/?q=code HTTP/1.1" 200 395

问题答案:

没有为[过滤]注册的[查询]

据我所知,您正在运行ES 5.0,并且正在发送的filtered查询已在ES 2.x中弃用,在ES
5.x中已删除

您需要将其替换为bool/filter查询。

因此,如果您有这样的事情:

{
  "query": {
    "filtered": {
      "filter": {}
    }
  }
}

只需将其替换为

{
  "query": {
    "bool": {
      "filter": {}
    }
  }
}


 类似资料:
  • 我已经阅读了这两篇构建搜索应用程序的教程。 使用OpenJDK在Ubuntu上安装Solr和django-haystack,在这里 Django-干草堆-Solr-安装指南,这里 但是当我来到: 配置django-haystack,根据文档设置搜索索引类 http://docs.haystacksearch.org/dev/tutorial.html#configuration 将所需的solr字

  • django-haystack 为Django提供了模块化的搜索,它提供一个统一的、友好的API,允许您插入不同的搜索后端(如Solr,Elasticsearch,Whoosh,Xapian,等等)而不需要修改代码。

  • 我目前将seetings文件配置为使用memcache缓存。 虽然网站运行完美,但我看到调试行,如: 因此,我感兴趣的是学习如何解决这个问题,以及如何实际测试是否正在使用后端缓存。它目前已实现用于所有页面。

  • 在尝试部署我使用django开发服务器开发的博客时收到400错误后,我开始了一个新的测试项目(使用start project,不做其他任何事情——只是在这里和那里进行一点配置)-尽可能少,以保持尽可能简单。 当我执行“manage.py runserver”时,它会显示一个页面,说我看到了这个,因为我的设置中有“DEBUG=True”。 到现在为止,一直都还不错。没有错误。 但是如果我使用uWSG

  • 问题内容: 我简单的Django应用程序在调试模式()下工作正常,并且在开发箱上的WSGI + Apache下运行,但是当我使用EC2时,我尝试收到的所有URL都出现间歇性错误(10-80%的时间)视图(无论是在我的应用中还是在Django管理员中。 在哪里可以找到有关此信息的调试信息?什么都没有出现,即使有。我已经检查了版本,记录了Request环境(请参阅ModWSGI Debugging T

  • 我正在尝试发布我的网站,我配置了所有设置(nginx 这个设置效果很好 然而,当我编辑调试时=True到False 我在浏览器上遇到这个错误,请求错误(400) 我也试过这些设置 (在发布这个问题之前,我检查了这个答案,当DEBUG=False时,Django给出了错误的请求(400))