2017-08-01 11 views
1

文字列の番号を取得しようとしています。私は正規表現のパターンを使ってこれをやっています。私が結果を得ると、 "1"、 "10"、 "2"のようなものが得られます。ソートしたいので、自然にソートするために左にゼロを追加する必要があります。辛いスクリプト - 文字列をdefにキャスト

私のスクリプトはここにある:私は、コマンドを実行しようとすると

{ 
    "from": 0, 
    "size": 40, 
    "sort": [ 
     { 
     "fields.myfield.keyword": { "order": "asc" }, 
     "_script": { 
      "type": "string", 
      "script": { 
       "inline": 
       "def m = /(\\d+$)/.matcher(doc['fields.myfield.keyword'].value); 
       if (m.find()) 
       { 
        String s = m.group(1); 
        String.format(\"%05d\", s.toString()); 
       } 
       else { return 0 }"    
      }, 
      "order" : "asc" 

     } 
     } 
    ], 
    "_source": { "include": ["fields.myfield"] }} 

、私は次のエラーを取得:

"failed_shards": [ 
{ 
    "shard": 0, 
    "index": "myindex", 
    "node": "kctN6d5ITrqtIMj4cbChKQ", 
    "reason": { 
     "type": "script_exception", 
     "reason": "compile error", 
     "script_stack": [ 
     "... ; String.format(\"%05d\", s.toString()); } else { re ...", 
     "        ^---- HERE" 
     ], 
     "script": "def m = /(\\d+$)/.matcher(doc['fields.myfield.keyword'].value); if (m.find()) { String s = m.group(1); String.format(\"%05d\", s.toString()); } else { return 0 }", 
     "lang": "painless", 
     "caused_by": { 
     "type": "class_cast_exception", 
     "reason": "Cannot cast from [String] to [def[]]." 
     } 
    } 
} 

にはどうすれString.Formatterを使用せずに左のゼロを追加することができますか?

ここでSTRINGからDEFにキャストしようとしていますか?

答えて

1

ゼロを追加するには、タイプを数字でなく文字列でなければなりません。あなたの代わりにInteger.valueOf(s)を試してみましたか(私の頭の上に、確認されていない)。

+0

私は確信していませんが、ゼロは整数として残っていますが、無視されると思います。自然にソートするには、 "0001"、 "0011"のようなものが必要です。 – NatsuDragonEye

関連する問題