Ответ «да» с помощью ScriptTransformer я обнаружил методом проб и ошибок.
В документации Solr показано, как добавить атрибут обновления к узлу поля с помощью «set», «add» или «inc». Если я создаю тестовый файл XML с необходимым атрибутом обновления, он отлично работает при передаче в обработчик обычного обновления. Но при передаче в DIH — даже без преобразования — атрибуты обновления полностью игнорируются.
Вот упрощенная версия преобразователя сценария, который я использовал для повторного введения атрибута обновления и обеспечения работы атомарных обновлений. Обратите внимание на использование Java HashMap.
var atomicTransformer = function (row) {
var authorMap = new java.util.HashMap();
var author = String(row.get('author'));
authorMap.put('add', author);
row.put('author', authorMap);
};
Это создает следующий JSON в режиме отладки DIH:
{
"id": [
123
],
"author": [
{
"add": "Smith, J"
}
]
}
Многозначные поля также не проблема: передайте ArrayList в HashMap вместо строки.
var atomicTransformer = function (row) {
var fruits = new java.util.ArrayList();
fruits.add("banana");
fruits.add("apple");
fruits.add("pear");
var fruitMap = new java.util.HashMap();
fruitMap.put('add', fruits);
row.put('fruit', fruitMap);
}
person
Peaeater
schedule
09.01.2014