2017-08-28 4 views
0

私は数時間これを試してきました。しかし、これは期待どおりに動作していません。は、整数型の弾性を持たない

私はpythonスクリプト経由でelasticsearchにデータをプッシュしています。以下は、整数として必要なフィールドですが、整数として格納されていません。時々、彼らはNone Typeであり、そうでなければ文字列です。だから、私はこれをした

body['fuel_fee'] = int(rows[a][23] or 0) 
    body['late_fee'] = int(rows[a][24] or 0) 
    body['other_fee'] = int(rows[a][26] or 0) 

しかし、私はまだ弾性の文字列として格納されていることがわかります。これらについては、sum の操作が必要です。

インデックスを削除してデータ全体を書き直したので、以前のマッピングの問題はないことが確認できました。

なぜこれらのフィールドを整数として取得できないのですか?これをどうすればいいのですか?

EDIT - 私はpostgresデータベースからデータを取得しています。ポストグルでは、これらのフィールドは整数ではなく文字列として格納されます。効果はありますか?私はここにpythonでタイプキャストしているので、いいえと思います。

答えて

1

あなたが(任意の実際のデータにインデックスを付ける前に)マッピングを作成して、明示的にフィールドタイプについてelasticsearch言うときは、フィールドのデータ型は、以下の方法

  • のいずれかで決定されます。あなたの例では、フィールドfuel_feeはの長さがにマッピングされ、非整数値を含むレコードはエラーをスローします
  • 最初のドキュメントに基づいて、elasticsearchがフィールドのタイプを決定します。その後、後続の文書フィールド値を同じタイプに変換しようとします。

質問に戻ると、すべてのフィールドが整数ではなく文字列として格納されていることをどのように知っていますか? GET <your-index>/_mappingを試して、あなたの前提が正しいかどうか確認してください。

問題が解決しない場合は、次のいずれかを試してください:

  • 任意のデータをインデックス化する前mappingsを作成します。
  • 索引は1つだけです(kibanaまたはcurl apiを使用)。マッピング出力を再度確認してください。
+0

私は木場でフィールドのタイプを見ることができます。木場はそれが文字列だと言います。 – Luv33preet

+0

また、私がデータをプッシュするためにpythonを使用している理由の1つは、弾性がすべてのフィールドの型を得ることができるため、マッピングをスキップすることができるということです。しかし、私はここで何が起こっているのか分からない。 – Luv33preet

+1

インデックス作成APIの詳細なスニペットを投稿してください。私はちょうどそれを試して、整数型のインデックスをLong型(文字列ではない) –

関連する問題