2014-01-08 3 views
3

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

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

ответ

7

Ответ «да» с 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); 
} 
Смежные вопросы