Подтвердить что ты не робот

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/ допустимые значения "установлены" и "добавить".

Любая идея?

4b9b3361

Ответ 1

Как оказалось, фрагмент кода, показанный выше в вопросе, действительно работает. Я не знаю, что было не так в первый раз, когда я попробовал, возможно, я просто забыл совершить или моя схема была неправильно сконфигурирована.

В любом случае этот вопрос очень локализован. Однако, поскольку api с картой хэша настолько плохо документирован, я подумал, что, возможно, стоит оставить этот вопрос и ответить.

Ключ хэш-карты может быть одним из трех значений:

  • set - для установки поля.
  • add - для добавления в многозначное поле.
  • inc - для увеличения поля.

Вот пример этого кода в модульных тестах solrj в методе testUpdateField.