Может ли Solr DIH выполнять атомарные обновления?

В Solr 4 появилась возможность выполнять атомарные (частичные) обновления существующих документов в индексе. т.е. можно сопоставить идентификатор документа и заменить содержимое только одного поля или добавить дополнительные записи в многозначные поля: http://wiki.apache.org/solr/Atomic_Updates

Можно ли выполнять атомарные обновления из DataImportHandler (DIH)?


person Peaeater    schedule 08.01.2014    source источник


Ответы (1)


Ответ «да» с помощью 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