相關組件
- python 3.6.8
- elasticsearch 7.10.2
- elasticsearch-py 7.1.0
解決方案
把 python 包從 elasticsearch-py 7.1.0 改成 elasticsearch-py 7.6.0 即可。
用其他版本可能也行,但我沒試過。
問題描述
調用 es.bulk 寫 es,報錯:
{
"index": {
"error": "RequestError(400, 'illegal_argument_exception', 'Action/metadata line [1] contains an unknown parameter [_version]')",
"status": 400,
"exception": "RequestError(400, 'illegal_argument_exception', {'error': {'root_cause': [{'type': 'illegal_argument_exception', 'reason': 'Action/metadata line [1] contains an unknown parameter [_version]'}], 'type': 'illegal_argument_exception', 'reason': 'Action/metadata line [1] contains an unknown parameter [_version]'}, 'status': 400})",
"data": {
"content": "xxx"
},
"_index": "test",
"_version": "1618329599999",
"_version_type": "external",
"_id": "c01986c137310a044c355a8b9323431f"
}
}
之所以想到可能是版本問題,是因為:
1、相同的代碼,灌 es6 是沒問題的;
2、查資料 _version not supported in elasticsearch 6.1 onwards #295 發現,版本確實可能會導致這個問題。但是粗看下來,跟我遇到的問題關系不大;
3、一個干擾:相同的數據,直接用 python 腳本 bulk 是沒問題的,但是用自己寫的 spark 腳本 bulk 就會報錯。后來才想起來,spark 腳本使用的包版本和 python 腳本使用的包版本並不相同。而 python 腳本用的是 7.6.0。