2016-04-18 27 views
-1

elasticsearchの小数点以下2桁の数値フィールドを持つドキュメントを検索するにはどうすればよいですか?次のようにelasticsearch - 小数点以下2桁以上の数字を検索する

私のマッピングは、次のように

{ 
    "items": { 
     "mappings": { 
     "item": { 
      "properties": { 
       "id": { 
        "type": "long" 
       }, 
       "item": { 
        "type": "string" 
       }, 
       "price": { 
        "type": "double" 
       } 
      } 
     } 
     } 
    } 
} 

サンプル文書は次のとおりです。

{ 
    "id": 1, 
    "item": "abc", 
    "price": 1234.567 
} 

私は次のクエリをしようとしたとき、私はNumberFormatExceptionが出ます: GETアイテム/ _search

{ 
    "query": { 
     "bool": { 
      "must": { 
       "regexp": {"price": "[0-9]*\\.[0-9]{3,}"} 
      } 
     } 
    } 
} 
+0

このエラーはどうなりますか? – CodeNotFound

+0

あなたが期待しているものが得られていないあなたのマッピングとあなたが試している質問を示してください。 – Val

+0

@Val編集した投稿とマッピング – Abhishek

答えて

0

数字フィールドで正規表現を使用することはできません。

これを回避するには、次のようなクエリ/フィルタscriptを使用します。期間の後に利用可能なポジションの数を確認するだけで、ポジション数が2以上の場合はtrueを返します。

{ 
    "query": { 
    "bool": { 
     "must": { 
     "script": { 
      "script": "def str = doc.price.value.toString(); def len = str.length(); def dot = str.indexOf('.'); return len - (dot+1) >= 2" 
     } 
     } 
    } 
    } 
} 
+0

この手助けをしましたか?もっと情報が必要ですか? – Val

関連する問題