2017-03-07 2 views
0

update_by_query 메서드를 사용하여 문서를 업데이트하려고하면 python-elasticsearch 클라이언트 - elasticsearch.py을 사용하고 있으며 탄성 검색이 쿼리를 구문 분석하지 못합니다. :: 다음탄성 검색 - 쿼리를 구문 분석하지 못했습니다.

update = es.update_by_query(index=index_el, 
          doc_type='1', 
          q='delivery_reference_id:' + str(cam_id) +'', 
          body=doc) 

cam_id의 샘플 값이 같은

{ 
    'script': { 
    'inline': 'ctx._source.viewers += info', 
    'params': { 
     'info': { 
     'time': datetime.datetime(2017, 3, 7, 18, 8, 50), 
     'viewer': '[email protected]' 
     } 
    } 
    } 
} 

탄성 검색이 호출됩니다 :

CAM_10_DATA_4_2017-03-07 18:02:07 

내부적으로 다음과 같이

내 업데이트 몸이다 다음 쿼리가 형성됨 ::

다음과 같은 오류를 수신

http://127.0.0.1:9200/user_tracker/1/_update_by_query?q=delivery_reference_id%3ACAM_10_DATA_4_2017-03-07+18%3A02%3A07

이다 : 누군가가 알아 낸 경우

Traceback (most recent call last): 
    File "C:\Users\catch\AppData\Roaming\Python\Python34\site-packages\django\core\handlers\exception.py", line 42, in inner 
    response = get_response(request) 
    File "C:\Users\catch\AppData\Roaming\Python\Python34\site-packages\django\core\handlers\base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "C:\Users\catch\AppData\Roaming\Python\Python34\site-packages\django\core\handlers\base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "C:\Users\catch\AppData\Roaming\Python\Python34\site-packages\django\views\decorators\csrf.py", line 58, in wrapped_view 
    return view_func(*args, **kwargs) 
    File "C:\Users\catch\AppData\Roaming\Python\Python34\site-packages\django\views\generic\base.py", line 68, in view 
    return self.dispatch(request, *args, **kwargs) 
    File "C:\Python34\lib\site-packages\rest_framework\views.py", line 483, in dispatch 
    response = self.handle_exception(exc) 
    File "C:\Python34\lib\site-packages\rest_framework\views.py", line 443, in handle_exception 
    self.raise_uncaught_exception(exc) 
    File "C:\Python34\lib\site-packages\rest_framework\views.py", line 480, in dispatch 
    response = handler(request, *args, **kwargs) 
    File "C:\Users\catch\PycharmProjects\myproject\myproj\apis\views.py", line 516, in get 
    viewer=viewer_email) 
    File "C:\Users\catch\PycharmProjects\myproject\myproj\apis\views.py", line 541, in update_track_info 
    doc=doc) 
    File "C:\Users\catch\PycharmProjects\myproject\myproj\apis\views.py", line 553, in es_update 
    body=doc) 
    File "C:\Python34\lib\site-packages\elasticsearch\client\utils.py", line 73, in _wrapped 
    return func(*args, params=params, **kwargs) 
    File "C:\Python34\lib\site-packages\elasticsearch\client\__init__.py", line 680, in update_by_query 
    doc_type, '_update_by_query'), params=params, body=body) 
    File "C:\Python34\lib\site-packages\elasticsearch\transport.py", line 318, 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 128, 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, 'search_phase_execution_exception', 'Failed to parse query [delivery_reference_id:CAM_10_DATA_4_2017-03-07 18:02:07]') 

좋을 텐데 다음과 같이

TransportError(400, 'search_phase_execution_exception', 'Failed to parse query [delivery_reference_id:CAM_10_DATA_4_2017-03-07 18:02:07]') 

전체 오류 로그입니다. 더 많은 정보가 필요한지 알려주십시오.

감사합니다. 미리 감사드립니다.

+0

당신은 무엇 ES 버전을 사용하고 있습니다 : 나는 다음과 같은 구문을 사용하여 좋은 결과를했다? – Alfe

+0

탄성 검색 버전 : 5.2.0 –

답변

0

쿼리 구문이 최신 버전이 아닌 것 같습니다.

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { "match": { "MYFIELD": "myoldvalue" } } 
     ] 
    } 
    }, 
    "script": { 
    "inline": "ctx._source.MYFIELD = \"mynewvalue\"", 
    "lang": "painless" 
    } 
} 

HTH :)

+0

python-elasticsearch 클라이언트를 사용하여 위의 요청을 어떻게 작성합니까? –

+0

그냥 위의 바디를 this로 바꾼다. – paqash

+0

나는 update_by_query 메소드를 사용하고있다. 하지만 –

관련 문제