Как получить доступ / обновить свойство вложенных полей с помощью MVEL в Elasticsearch

Я хочу добавить некоторые данные в документ в Elasticsearch и установить метку времени с помощью MVEL.

это то, что я сейчас пытаюсь. Но это не работает.

{"error": "ElasticSearchIllegalArgumentException [не удалось выполнить скрипт]; вложено: PropertyAccessException [[Ошибка: не удалось получить доступ к свойству (отметка времени) в: java.lang.Long] \ n [Рядом: {... отметка времени .... }] \ n ^ \ n [Строка: 1, Столбец: 1]]; "," статус ": 400}

Как мне получить доступ к полю отметки времени (оно успешно создано с помощью сопоставления)

  {
  "script": "
            valueSet.Timestamp = time();
            if (ctx._source[\"values\"] == null) { ctx._source.values = valueSet} else {ctx._source.values += valueSet}
            ",
  "params": {
    "valueSet": 
    [ 
    {
      "Timestamp": "",
      "value": "100.00"
    } 
   ]
  }
}

ОБНОВИТЬ:

Узнал, как получить доступ к valueSet

  {
  "script": "
            valueSet[0].value = 'test';
            if (ctx._source[\"values\"] == null) { ctx._source.values = valueSet} else {ctx._source.values += valueSet}
            ",
  "params": {
    "valueSet": 
    [ 
    {
      "Timestamp": "",
      "value": "100.00"
    } 
   ]
  }
}

Вышеуказанное заменит "100.00" на "test".


person Jabb    schedule 01.11.2013    source источник
comment
Вы пробовали получить доступ к другому полю с помощью этого скрипта? Может, поле временной метки - частный случай?   -  person MeiSign    schedule 01.11.2013
comment
джепп! безуспешно. он не может получить доступ к любому полю из valueSet, используя указанный выше синтаксис.   -  person Jabb    schedule 01.11.2013


Ответы (1)


Я могу обновить весь массив или все поле очень просто, как массив. выполните этот шаг.

шаг -1 поместите данные.

    PUT /1/user/1
    {
        "userId":2,
        "sid":1,
             "1": [
                    "24 hrs left!"
                ]
            ,
            "2": 9
            ,
             "32": "2014-08-01T00:00:00"
            ,
             "evant": [

        {
            "name": "2",
            "count": 9,
            "first_date":"2014-08-01T00:00:00",
            "last_date":"2014-08-01T00:00:00",
            "_date":["2014-08-01T00:00:00",
            "2014-08-01T00:00:00",
            "2014-08-01T00:00:00"]
        },
        {
            "name": "3",
            "count": 9,
            "first_date":"2014-08-01T00:00:00",
            "last_date":"2014-08-01T00:00:00",
            "_date":["2014-08-01T00:00:00",
            "2014-08-01T00:00:00",
            "2014-08-01T00:00:00"]
        }]
}

шаг-2. обновить любое вложенное значение поля.

POST  /1/user/1/_update
{
  "script": "foreach (item : ctx._source.evant) { if (item['name'] == name) { item['name'] =  item['name']==null?\"none\": 'myname'; } }",
  "params": {"name": "abc"}
}

шаг 3. добавить любое новое поле.

POST  /1/user/1/_update
{
  "script": "foreach (item : ctx._source.evant) { if (item['name'] == name) { item['Fname']='zyz'; } }",
  "params": {"name": "abc"}
}
person Dharam Bhai    schedule 05.01.2015