2016-08-08 2 views
0

По нашему требованию нам нужно найти максимальный идентификатор документа перед добавлением нового документа. Проблема здесь заключается в том, что doc может содержать строковые данные. Так что пришлось использовать встроенный скрипт на эластичном запросе, чтобы узнать максимальный id только для документа, который имеет целочисленные данные, иначе возвращающий 0. am используя следующий встроенный запрос скрипта, чтобы найти max-key, но не работает , вы можете мне помочь?Как проверить данные поля числовыми при использовании встроенного скрипта в ElasticSearch

{ 
    "size":0, 
    "query": 
    {"bool": 
    {"filter":[ 
     {"term": 
     {"Name": 
      { 
      "value":"Test2" 
      } 
     }} 
      ] 
    }}, 
      "aggs":{ 
      "MaxId":{ 
       "max":{ 
       "field":"Key","script":{ 
        "inline":"((doc['Key'].value).isNumber()) ? Integer.parseInt(doc['Key'].value) : 0"}} 
      } 
      } 
} 
+0

«Не работает» означает, что она выдает ошибку (если да, пожалуйста, поделитесь) или не возвращает какой-либо документ? Можете ли вы поделиться образцом документа и вашим картографированием? – Val

+0

я получаю следующее исключение: ошибка ": { "ROOT_CAUSE": [ { "типа": "illegal_argument_exception", "разум": "Прогнозный числовой тип на поле [Key], но есть [строка]" } ], - я вяжу это, потому что isNumeric call on inline script не работает. Вы знаете, что мне здесь не хватает? Спасибо за ваш ответ. – Sasi

+0

Ошибка в том, что агрегация 'max' поддерживает только числовые поля, т. е. вы не можете указать строковое поле (т.е. 'Key') в агрегации' max'. Просто удалите поле '': «Key» 'part и сохраните часть скрипта – Val

ответ

0

Ошибка происходит потому, что агрегация макс поддерживает только числовые поля, то есть вы не можете указать поле строки (т.е. Key) в максимальной агрегации.

Просто удалите "field":"Key" часть и только сохранить часть сценария

{ 
    "size": 0, 
    "query": { 
    "bool": { 
     "filter": [ 
     { 
      "term": { 
      "Name": "Test2" 
      } 
     } 
     ] 
    } 
    }, 
    "aggs": { 
    "MaxId": { 
     "max": { 
     "script": { 
      "inline": "((doc['Key'].value).isNumber()) ? Integer.parseInt(doc['Key'].value) : 0" 
     } 
     } 
    } 
    } 
} 
Смежные вопросы