Django / Haystack error: elasticsearch.exceptions.RequestError: TransportError (400, 'parsing_exception', ...)

I am using elasticsearch as the backend for haystack in my Django project. I created everything needed for the search, as mentioned here . But when I search, I throw a trace error with TransportError (400, "parsing_exception", "no [query] registered for [filter]").

I was looking for this problem. But do not get any solution. I would appreciate help on this.

My trace:

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: TraceBack after downgrading to elasticsearch == 1.7.0

 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 
+6
source share
2 answers

no [request] registered for [filtered]

From what I see, you are using ES 5.0 and you are sending a filtered request that is deprecated in ES 2.x and removed in ES 5.x.

Instead, you need to replace it with bool/filter query .

So, if you have something like this:

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

Just replace it with

 { "query": { "bool": { "filter": {} } } } 
+4
source

Elasticsearch already rejects the filtered request. Use bool instead.

This works for me.

0
source

Source: https://habr.com/ru/post/1013570/


All Articles