Spring数据solr总是创建多值字段

时间:2016-08-14 17:58:54

标签: spring spring-mvc solr spring-data spring-data-solr

我正在使用 solr5.5.1 spring-data-solr 1.4.2.RELEASE 。我已经使用我的工作项目配置了spring data solr并且工作正常。但是当我使用模型类向 solr 插入数据时,它会自动使用模型类的相关字段更新托管模式文件。在此模型中,我不使用多值类型,但 spring-data-solr 将托管模式文件更新为多值属性。为什么会这样? 模型类的示例字段声明

@SolrDocument(solrCoreName = "car")
public class CarModel{

    @Id
    @Indexed(type = "string")
    private String id;

    @Indexed(type = "string")
    private String condition;


    @Indexed(type = "string")
    private String name;

    //getters n setters
}

当我通过SolrCrudRepository保存此类的对象时。然后,托管模式将像这样更新,

<field name="condition" type="strings"/>
<field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="name" type="strings"/>

这里的字段是多值的。这里发生了什么,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我不相信Spring会管理架构的创建。它假定您的所有字段都已定义。因此,您可以使用无模式模式来创建模式,该模式在solrconfig.xml中定义。

无模式模式会创建多值字段,因为它不知道值是随时间变化的单值还是多值。所以,它在谨慎方面是错误的。

最好的办法是通过编辑架构文件并重新加载,或者使用为其提供界面的新管理界面来显式创建您想要的架构。

或者您可以修改无模式匹配定义以创建单数字段,但如果其中一个是多值的话,它将失败。除非你使用模式来指定哪些应该是单数的,哪些是多值的。但到那时你也可以直接宣告它们。

答案 1 :(得分:0)

我遇到了同样的问题,但我尝试使用以下建议的实现。 Spring Data Solr: how to set multiValue to false when declaring a field

另外,我更改了solrconfig.xml中的默认实现。对于所有的人来说,我已经为tlong等了。

 <processor class="solr.AddSchemaFieldsUpdateProcessorFactory">
  <str name="defaultFieldType">string</str>
  <lst name="typeMapping">
    <str name="valueClass">java.lang.Boolean</str>
    <str name="fieldType">boolean</str>
  </lst>
  <lst name="typeMapping">
    <str name="valueClass">java.util.Date</str>
    <str name="fieldType">tdate</str>
  </lst>
  <lst name="typeMapping">
    <str name="valueClass">java.lang.Long</str>
    <str name="valueClass">java.lang.Integer</str>
    <str name="fieldType">tlong</str>
  </lst>
  <lst name="typeMapping">
    <str name="valueClass">java.lang.Number</str>
    <str name="fieldType">tdouble</str>
  </lst>
</processor>

我不确定,如果它将来会产生任何其他问题。现在,我能够看到字段正在接受单个值。