2015-04-30 6 views
1

Я использую обновление по плагину запроса (https://github.com/yakaz/elasticsearch-action-updatebyquery/) для обновления документов по запросу. В моем случае, есть вложенное поле в документе, отображение что-то вроде этого:Возможно ли обновить вложенное поле по запросу?

"mappings": { 
    "mytype": { 
    "properties": { 
     "Myfield1": { 
     "type": "nested", 
     "properties": { 
      "field1": { 
      "type": "string" 
      }, 
      "field2": { 
      "type": "long" 
      } 
     } 
     }, 
     "Title": { 
     "type": "string" 
     } 
    } 
    } 
} 

Тогда я хочу, чтобы обновить вложенное поле Myfield1 по запросу с следующей просьбой:

Но, к сожалению, это делает не работа.

{ 
    "query": { 
    "match": { 
     "Title": "elasticsearch" 
    } 
    }, 
    "script": "ctx._source.Myfield1 = [{'nestfield1':'foo blabla...','nestfield2':100},{'nestfield1':'abc...','nestfield2':200}]" 
} 

Выполняет ли обновление по запросу поддержку вложенного объекта?

BTW: любые другие способы обновления документа по запросу?

Является ли обновление по запросу плагином единственным выбором?

+0

гм, я был абсолютно уверен, что вы могли бы обновить документ без каких-либо плагинов, просто индексировать документ с таким же идентификатором - он будет заменен – Mysterion

+1

Да, я могу частичное обновление документ по идентификатору. Но тогда мне нужно сначала узнать точный идентификатор каждого документа, который будет обновляться. Поэтому я предпочитаю «обновлять по запросу», чтобы я мог обновить doc по запросу в любом поле. – Youxu

ответ

0

Вы можете попробовать с params, что-то вроде этого:

"query" : { 
    "match_all" : {} 
}, 
"script" : "ctx._source.Myfield1 = Myfield1;", 
"params": { 
    "Myfield1": { 
    "nestfield1": "foo blabla..." 
    } 
} 

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

"query" : { 
    "match_all" : {} 
}, 
"script" : "ctx._source.Myfield1 = Myfield1; ctx._source.Myfield1.nestfield1 = ctx._source.Myfield1Nestfield1; ctx._source.Myfield1.nestfield2 = ctx._source.Myfield1Nestfield2;", 
"params": { 
    "Myfield1": { 
    "nestfield1": "init_data" 
    } 
} 
Смежные вопросы