Spring data solr 总是创建多值字段
Spring data solr always create multivalued fields
我正在使用 solr5.5.1 和 spring-data-solr 1.4.2.RELEASE .我已经用我的工作项目配置了 spring 数据 solr,并且工作正常。但是当我使用模型 class 将数据插入 solr 时,它会自动使用模型的相关字段更新 managed-schema 文件 class。在此模型中,我没有使用多值类型,但 spring-data-solr 将托管模式文件更新为多值属性。为什么会这样?
模型的示例字段声明 class
@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
保存此 class 的对象时。然后 managed-schema 将像这样更新,
<field name="condition" type="strings"/>
<field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="name" type="strings"/>
这里的字段是多值的。这里发生了什么,我该如何解决?
我不相信 Spring 管理架构的创建。它假定您的所有字段都已定义。因此,您正在使用无模式模式创建模式,该模式在solrconfig.xml.
中定义
并且无模式模式会创建多值字段,因为它不知道随着时间的推移这些值是单值还是多值。所以,谨慎是错误的。
您最好的选择是通过编辑架构文件并重新加载,或者使用为其提供接口的新 Admin UI 来明确创建您想要的架构。
或者您可以修改无模式匹配定义以创建单一字段,但如果其中一个字段是多值的,它将失败。除非你使用模式来指定它们中哪些应该是单值的,哪些应该是多值的。但是到那时你还是直接声明它们吧。
我遇到了同样的问题,但我尝试使用下面建议的实现方式。
Spring Data Solr: how to set multiValue to false when declaring a field
此外,我更改了 solrconfig.xml 中的默认实现。我有 tlongs 到 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>
我不确定将来是否会产生任何其他问题。现在,我可以看到字段正在接受单一值。
我正在使用 solr5.5.1 和 spring-data-solr 1.4.2.RELEASE .我已经用我的工作项目配置了 spring 数据 solr,并且工作正常。但是当我使用模型 class 将数据插入 solr 时,它会自动使用模型的相关字段更新 managed-schema 文件 class。在此模型中,我没有使用多值类型,但 spring-data-solr 将托管模式文件更新为多值属性。为什么会这样? 模型的示例字段声明 class
@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
保存此 class 的对象时。然后 managed-schema 将像这样更新,
<field name="condition" type="strings"/>
<field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="name" type="strings"/>
这里的字段是多值的。这里发生了什么,我该如何解决?
我不相信 Spring 管理架构的创建。它假定您的所有字段都已定义。因此,您正在使用无模式模式创建模式,该模式在solrconfig.xml.
中定义并且无模式模式会创建多值字段,因为它不知道随着时间的推移这些值是单值还是多值。所以,谨慎是错误的。
您最好的选择是通过编辑架构文件并重新加载,或者使用为其提供接口的新 Admin UI 来明确创建您想要的架构。
或者您可以修改无模式匹配定义以创建单一字段,但如果其中一个字段是多值的,它将失败。除非你使用模式来指定它们中哪些应该是单值的,哪些应该是多值的。但是到那时你还是直接声明它们吧。
我遇到了同样的问题,但我尝试使用下面建议的实现方式。 Spring Data Solr: how to set multiValue to false when declaring a field
此外,我更改了 solrconfig.xml 中的默认实现。我有 tlongs 到 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>
我不确定将来是否会产生任何其他问题。现在,我可以看到字段正在接受单一值。