Я использую spring data solr для индексации данных. Когда сущность содержит поле типа byte[], возникает исключение при вставке данных в solr.
Исключение: org.springframework.data.solr.UncategorizedSolrException:
ОШИБКА: [doc=a1-t1] Ошибка добавления поля 'contents'='[1, 2, 3, 4, -1, 2, 3, 8]' msg=Длина строки должна быть кратна четырем.; вложенным исключением является org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException:
ОШИБКА: [doc=a1-t1] Ошибка добавления поля 'contents'='[1, 2, 3, 4, -1, 2, 3, 8]' msg=Длина строки должна быть кратна четырем. ([1, 2...] — это просто тестовые данные.)
Ниже приведена информация о моем коде. Организация:
@IdClass(AttachedFileSolrPk.class)
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SolrDocument(solrCoreName = "attached_file")
public class AttachedFileSolr implements Serializable {
/**
* ID
*/
@Id
@Field
private String id;
// @ElementCollection(targetClass=byte.class)
@Field
@NotNull
private byte[] contents;
//other fields are omitted
}
Репозиторий:
public interface AttachedFileSolrRepository extends SolrCrudRepository<AttachedFileSolr, AttachedFileSolrPk> {
//custom interface are omitted
}
Репозиторий вызовов:
byte[] contents = {1, 2, 3, 4, -1, 2, 3, 8};
attachedFileSolr = AttachedFileSolr.builder().id("a1").contents(contents).build();
attachedFileSolrRepository.save(attachedFileSolr);
схема.xml
<fieldType name="binary" class="solr.BinaryField"/>
<field name="contents" type="binary" multiValued="true" indexed="false" required="true" stored="true"/>
framework: spring boot, spring data solr starter
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
Солер версия: 6.1.0
Мой solr хорошо работает с другими типами, такими как строка, дата и логическое значение, но я впервые использую двоичное поле. Я думаю, что просто настроить schema.xml и java-сущность, но это не так. Я много перепробовал, например, изменил byte[]
на byte и multiValued="true"
на false, или indexed="false"
на false и так далее, но всегда получалось одно и то же исключение. Я ценю любые советы от кого бы то ни было. Спасибо!