2016-03-16 3 views
0

У меня есть документы в упругом поиске, который выглядит как:Как округлить двойную 2 десятичной точки - elasticsearch

{ 
       "entityFk": 0, 
       "entityCode": "ADM", 
       "entityObj": { 
        "id": 0, 
        "code": "ADM", 
        "description": "ADM - FIRSTCOM" 
       }, 
       "practiceFk": 54745, 
       "practiceObj": { 
        "id": 54745, 
        "code": "33.04.01.32", 
        "description": "Artrotomia ou artroscopia com tratamento de lesões articulares circunscritas ", 
        "practiceValue": 23.5 
       } 
      } 
     } 

Я хочу суммировать все «practiceValue» (не нуль), который имеет entityCode.description равно "FIRST", поэтому я сделал этот запрос:

{ 
    "size" : 0, 
    "query" : { 
     "bool" : { 
      "must_not" : [ 
       { 
        "missing" : { "field" : "practiceObj.practiceValue" } 
       } 
      ], 
      "must" : [ 
       { 
        "match" : { "entityObj.description" : "FIRST" } 
       } 
      ] 
     } 
    }, 
    "aggs" : { 
     "total" : { 
      "sum" : { "field" : "practiceObj.practiceValue"} 

     } 
    } 
} 

Вот результат я получил:

{ 
    "took": 26, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 11477, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "aggregations": { 
     "total": { 
      "value": 1593598.7499999984 
     } 
    } 
} 

сделка: ч ow может округлить значение до 2 десятичной точки. Может кто-нибудь помочь? Спасибо.

EDIT:

here's мое отображение:

{ 
    "index_practice_entities": { 
     "mappings": { 
      "practice_entities_search": { 
       "properties": { 
        "entityCode": { 
         "type": "string" 
        }, 
        "entityFk": { 
         "type": "long" 
        }, 
        "entityObj": { 
         "properties": { 
          "code": { 
           "type": "string" 
          }, 
          "description": { 
           "type": "string" 
          }, 
          "id": { 
           "type": "long" 
          } 
         } 
        }, 
        "practiceFk": { 
         "type": "long" 
        }, 
        "practiceObj": { 
         "properties": { 
          "code": { 
           "type": "string" 
          }, 
          "description": { 
           "type": "string" 
          }, 
          "id": { 
           "type": "long" 
          }, 
          "practiceValue": { 
           "type": "double" 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

ответ

0

Вы можете попробовать script для достижения этой цели:

"aggs" : { 
    "total" : { 
     "sum" : { "script" : "(doc['practiceObj.practiceValue'].value).round(2)" // practiceValue should be double or float 
     } 

    } 
} 

Убедитесь, что to enable scripting

+0

уже включен скрипт и не работает, все еще возвращает такое же значение – sergiogomesdev

+0

даже после округления ??? Можете ли вы показать отображение своего индекса, пожалуйста? – Richa

+0

отредактировал это сообщение, добавив карту – sergiogomesdev

0

Пожалуйста, попробуйте ниже упомянутый сценарий, он будет охватывать агрегированное значение до 2 деци малые места.

"aggs" : { 
     "total" : { 
      "sum" : { 
       "script" : "Math.round(doc['practiceObj.practiceValue'].value*100)/100.0" 
       } 

     } 
    } 
+0

уже пробовал, что и возвращает мне то же значение – sergiogomesdev

+0

с 100 или 100.0 в дивизоре? – Rahul

+0

с делителем 100.0 – sergiogomesdev