Solrj api для частичного обновления документа
Solr 4 beta отсутствует, версия GA скоро появится. Частичные обновления документов были в течение некоторого времени, как описано здесь: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/
Однако я не понял, как это сделать с помощью solrj api.
Кто-нибудь знает, возможно ли это с помощью solrj? Или Solrj просто не работает с этой функцией?
update:, как я описываю в списке рассылки (см. ответ здесь), я обнаружил, что в solrj api значение SolrInputField может быть картой - это не должно быть простым скалярным значением.
Если это карта, solrj добавляет дополнительный атрибут update
к элементу xml поля.
Например,
Этот код:
SolrInputDocument doc = new SolrInputDocument();
Map<String, String> partialUpdate = new HashMap<String, String>();
partialUpdate.put("set", "foo");
doc.addField("id", "test_123");
doc.addField("description", partialUpdate);
дает этот документ:
<doc boost="1.0">
<field name="id">test_123</field>
<field name="description" update="set">foo</field>
</doc>
В этом примере я использовал слово "set" для этого дополнительного атрибута, но он не работает.
Solr не обновляет поле, как я ожидал.
Согласно этой ссылке:
http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/
допустимые значения "установлены" и "добавить".
Любая идея?
Ответы
Ответ 1
Как оказалось, фрагмент кода, показанный выше в вопросе, действительно работает. Я не знаю, что было не так в первый раз, когда я попробовал, возможно, я просто забыл совершить или моя схема была неправильно сконфигурирована.
В любом случае этот вопрос очень локализован. Однако, поскольку api с картой хэша настолько плохо документирован, я подумал, что, возможно, стоит оставить этот вопрос и ответить.
Ключ хэш-карты может быть одним из трех значений:
- set - для установки поля.
- add - для добавления в многозначное поле.
- inc - для увеличения поля.
Вот пример этого кода в модульных тестах solrj в методе testUpdateField
.