0

elasticsearch 5.0データベースからのデータを含むインデックスを で作成していますMySQLstring私のテーブルにdoubleは ESとして必要なフィールドがあります。

したがって、次を使用して適切なフィールドのインデックスを作成したときに、マッピングを追加しましたPUT

{
  "mappings": {
    "my_type": {
      "properties": {      
        "chargeamount": {
          "type": "double"
        }
      }
    }
  }
}

これを行った後、小数点以下の数字を含む値 (つまり: 23.23) は値を double として適切に返しますが、小数点以下の後にゼロを持つ数字 (つまり: 23.00) はそれを文字列自体として返します (つまり: 2300 )。

編集:これらは私が行った手順です:

  1. 最初に、上記のマッピングを本文としてPUTリクエスト ( ) を介してインデックスを作成しました。http://hostmachine:9402/indexname

  2. 次に、を使用して (MySQL テーブルから) データをインデックスにプッシュしています logstash。必要に応じて、logstash conf を提供できます。

  3. データがインデックスにアップロードされたら、結果が double 値を示しているかどうかを確認するために、クエリを実行してみました。POSTリクエスト (および本文は次のhttp://hostmachine:9402/indexname/_search?とおりです。

    {  
            "size" : 0,
           "query":{  
              "query_string":{  
                 "query":"myquery"
              }
           },
           "aggs":{  
              "total":{  
                 "terms":{  
                    "field":"userid"
                 },
                 "aggs":{  
                    "total":{  
                       "sum":{  
                           "script":{
                            "lang": "painless",
                            "inline" : "doc['chargeamount'].value"
                           }
                       }
                    }
                 }
              }
           }
        }
    

結果は、以下のスナップショットのようになります。ここでは、267472.00である必要があります。

ここに画像の説明を入力

どこが間違っていますか?どんな助けでも大歓迎です。

4

1 に答える 1

1

document_typeインデックス作成クエリのマッピング タイプが、logstash 構成にあるものとまったく同じであることを確認する必要がありますmessage_logs

PUT response_summary6
{
  "mappings": {
    "message_logs": {          <--- change this
      "properties": {
        "userid": {
          "type": "text",
          "fielddata": true
        },
        "responsecode": {
          "type": "integer"
        },
        "chargeamount": {
          "type": "double"
        }
      }
    }
  }
}
于 2016-11-01T16:51:05.663 に答える