web-dev-qa-db-ja.com

データ送信中のElasticSearchエラー

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は初めてなので、何が間違っているのかわかりません。

13
noobEngineer

最初に中括弧を使用してから、配列に名前を付けてみてください。それを試して、それが機能するかどうかを確認してください。

例えば:

_{root:[1, 2, 3, 4, 5]}
_

オブジェクト内に含まれているため機能する可能性があります。

さらに良い。 JSON.stringify();を試している間に、配列がJSONに変換されることがわかりました。

_{1, 2, 3, 4, 5}
_
9
hellol11

ありがとう@ hellol11

私がに変更したとき、それは働いた

    {root :
[
    {"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"},
    {"column1": "pqr", "column2": "stu", "column3": "vwx", "column4": "", "column5": ""}

]}
6
noobEngineer

最近、curlを使用してこれに遭遇しましたが、これは単純なタイプミスでした。私はインラインjsonを使用していませんでしたが、ファイルから使用していました。ファイル名の前に@記号を含めるのを忘れました。

curl -XPUT -H'Content-Type:application/json' localhost:9200/Twitter [email protected]
4
Brandon Kearby

私はこの問題を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)
3
Scott Nestor

Windows環境では、この問題を解決しました。

-d plus double quotation(") 

バックスラッシュと二重クォータトン(\ ")で名前を囲む

コマンド>

curl (more-option) -d "{\"column1\": \"abc\", \"column2\": \"def\", \"column3\": \"dghi\", \"column4\": \"jkl\", \"column5\": \"mno\"}"
1
Jung

弾性検索では、バルクデータを投稿する場合、各リストオブジェクトは改行である必要があります。したがって、意味を使用する場合はすべてを改行で作成するか、コードから使用する場合は改行文字を追加します\ n ...

0
balram pundir

Elasticsearchに投稿しようとしたときにノードjsを使用しているときに同じエラーが発生していました。ノードフェッチパッケージを使用して、elasticsearchにPUTリクエストを行いました。郵便配達員とまったく同じものを使用してもエラーは発生しませんでしたが、ノードjsでエラーが発生していたため、奇妙でした。私は最初にやっていた:

const current = {
    "id" : "123456789"
}
const options = {
    method: "POST",
    headers: {
        "Content-Type": "application/json"
    },
    body: current
}

私がそれを変更したときにエラーが修正されたことがわかります:

body: JSON.stringify(current)
0
raviabhiram