Solr:@Dynamic字段不适用于选择查询

时间:2019-04-10 05:15:57

标签: spring-boot solr spring-data

我的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

我试图解决这一整天,但没有找到任何解决方案。 请指导以寻求更好的解决方案。 谢谢。

1 个答案:

答案 0 :(得分:0)

尝试了很多东西之后。我现在开始工作了,我认为这可能会对其他人有所帮助。 我如下更改@Dynamic字段数据类型

@Dynamic
@Field("mappedField_*")
private Map<String, List<String>> mappedFieldValues;

通过将此映射值从String更改为List now now。