我的Solr文档如下:
@SolrDocument(collection = "test-core")
public class TestCore {
@Id
@Indexed
private Integer id;
@Indexed(name = "name", type = "string")
private String name;
@Dynamic
@Field("mappedField_*")
private Map<String, String> mappedFieldValues;
}
它成功地将记录保存在solr中,如下面的快照所示:
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"*:*",
"_":"1554871478940"}},
"response":{"numFound":1,"start":0,"docs":[
{
"id":"123",
"name":["Test name"],
"mappedField_firstName":["vishal"],
"mappedField_lastName":["rana"],
"_version_":1630400697277087744}]
}}
现在,当我尝试通过以下查询按ID查找此记录时:
Optional<TestCore> optional = testCoreRepo.findById(123);
它不起作用,可能是因为那里存在@Dynamic字段。该错误日志如下:
org.springframework.dao.InvalidDataAccessApiUsageException: Incompartible types found. Expected class java.lang.String for mappedFieldValues with name mappedField_*, but found class java.util.ArrayList; nested exception is java.lang.IllegalArgumentException: Incompartible types found. Expected class java.lang.String for mappedFieldValues with name mappedField_*, but found class java.util.ArrayList
我试图解决这一整天,但没有找到任何解决方案。 请指导以寻求更好的解决方案。 谢谢。
答案 0 :(得分:0)
尝试了很多东西之后。我现在开始工作了,我认为这可能会对其他人有所帮助。 我如下更改@Dynamic字段数据类型
@Dynamic
@Field("mappedField_*")
private Map<String, List<String>> mappedFieldValues;
通过将此映射值从String更改为List now now。