2016-11-01 8 views
0

У меня есть индекс, созданный в elasticsearch 5.0, где он содержит данные из моего MySQL db. В моей таблице есть поле string, которое мне нужно как 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. Как только данные загружаются в индекс, я попробовал запросить как таковой, чтобы проверить, показывает ли результат двойное значение. 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:

enter image description here

Где я буду ошибаться? Любая помощь может быть оценена.

+0

Можете ли вы показать пример документа вы индексируется, и команды, которые вы используете? – Val

+0

@Val пример документа в смысле? Я создал индекс, используя этот запрос ('http: // hostmachine: 9402/indexname') с указанным выше отображением как' body'. После того как я создал индекс как таковой, я пытаюсь загрузить данные в индекс, используя 'logstash'. – Kulasangar

+2

Проще говоря, можете ли вы показать все команды, которые вы запускали, чтобы можно было воссоздать ту же проблему, что и вы? – Val

ответ

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" 
     } 
     } 
    } 
    } 
}