#solr
#solr
Вопрос:
<arr name="itemDescSpell">
<str>Cable Tie, 4.0L (102mm), Miniature, Nyl</str>
<str>Cable Tie, 4.0L (102mm), Miniature, Nyl</str>
</arr>
itemDescSpell
copyField
что вызывает ошибку, когда документ Solr обновляется каждый раз. Я не хочу создавать поле как multiValued="true"
в схеме copyField определяется следующим образом
<field name="itemDescSpell" type="textSpell"/>
<copyField source="description" dest="itemDescSpell"/>
Ошибка:
multiple values encountered for non multiValued field itemDescSpell.
Кто-нибудь может помочь мне решить эту проблему с помощью SolrJ, сохранив при этом тип этого поля как textSpell
?
Комментарии:
1. Как определяется тип поля itemDescSpell в схеме?
Ответ №1:
Попробуйте использовать пользовательский UpdateRequestProcessor, чтобы перезаписать значение, присутствующее в поле itemDescSpell . Solr выдает исключение, которое вы получаете, когда назначение copyfield уже заполнено, поэтому вам нужно удалить строку copyField из вашей схемы и добавить в вашу конфигурацию пользовательский UpdateRequestProcessor, который может выглядеть следующим образом :
public class CustomFactory extends UpdateRequestProcessorFactory {
@Override
public UpdateRequestProcessor getInstance(SolrQueryRequest req, SolrQueryResponse rsp, UpdateRequestProcessor next) {
return new Custom(next);
}
public class Custom extends UpdateRequestProcessor {
public Custom(UpdateRequestProcessor next){
super(next);
}
@Override
public void processAdd(AddUpdateCommand cmd) throws IOException {
cmd.solrDoc.setField("foo",cmd.solrDoc.getFieldValue("bar"));
}
}
}
Это НЕ готовый к производству код, но он должен дать вам представление о том, как должен выглядеть конечный код. Чтобы настроить значения полей, вы можете переопределить метод инициализации на заводе и передать их в конфигурации.
Основное отличие заключается в том, что solr использует addField при обнаружении copyField, а этот класс использует SetField
Комментарии:
1. Я решил это, я использовал solr версии 4.0, поэтому это вызвало проблему. Теперь я обновил его до версии 4.3. Это работает