JSONをelasticSearchに送信しようとしています。 PostmanとSOAPUIを使用してみました。データは
[{"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"}, {"column1": "pqr", "column2": "stu", "column3": "vwx", "column4": "", "column5": ""}]
次のエラーが返されます
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "failed to parse"
}
],
"type": "mapper_parsing_exception",
"reason": "failed to parse",
"caused_by": {
"type": "not_x_content_exception",
"reason": "Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes"
}
},
"status": 400
}
しかし、単一のJSON配列を投稿すると、つまり.
{"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"}
その後、正常に動作します。 ElasticSearchは初めてなので、何が間違っているのかわかりません。
最初に中括弧を使用してから、配列に名前を付けてみてください。それを試して、それが機能するかどうかを確認してください。
例えば:
_{root:[1, 2, 3, 4, 5]}
_
オブジェクト内に含まれているため機能する可能性があります。
さらに良い。 JSON.stringify();
を試している間に、配列がJSONに変換されることがわかりました。
_{1, 2, 3, 4, 5}
_
ありがとう@ hellol11
私がに変更したとき、それは働いた
{root :
[
{"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"},
{"column1": "pqr", "column2": "stu", "column3": "vwx", "column4": "", "column5": ""}
]}
最近、curlを使用してこれに遭遇しましたが、これは単純なタイプミスでした。私はインラインjsonを使用していませんでしたが、ファイルから使用していました。ファイル名の前に@記号を含めるのを忘れました。
curl -XPUT -H'Content-Type:application/json' localhost:9200/Twitter [email protected]
私はこの問題をPythonスクリプト(要求を使用)を試してESにPOST=を挿入しました。 json.dumps()
例(Pythonスニピット):
import json
import requests
headers={'Content-Type': 'application/json'}
data={'hello':'barney'}
response = requests.post('https://<my_es_domain>/<my_es_ix>/<my_doc_type>', data=json.dumps(data), headers=headers)
Windows環境では、この問題を解決しました。
-d plus double quotation(")
バックスラッシュと二重クォータトン(\ ")で名前を囲む
コマンド>
curl (more-option) -d "{\"column1\": \"abc\", \"column2\": \"def\", \"column3\": \"dghi\", \"column4\": \"jkl\", \"column5\": \"mno\"}"
弾性検索では、バルクデータを投稿する場合、各リストオブジェクトは改行である必要があります。したがって、意味を使用する場合はすべてを改行で作成するか、コードから使用する場合は改行文字を追加します\ n ...
Elasticsearchに投稿しようとしたときにノードjsを使用しているときに同じエラーが発生していました。ノードフェッチパッケージを使用して、elasticsearchにPUTリクエストを行いました。郵便配達員とまったく同じものを使用してもエラーは発生しませんでしたが、ノードjsでエラーが発生していたため、奇妙でした。私は最初にやっていた:
const current = {
"id" : "123456789"
}
const options = {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: current
}
私がそれを変更したときにエラーが修正されたことがわかります:
body: JSON.stringify(current)