Spring data solr 总是创建多值字段

Posted

技术标签:

【中文标题】Spring data solr 总是创建多值字段【英文标题】:Spring data solr always create multivalued fields 【发布时间】:2016-08-14 17:58:53 【问题描述】:

我正在使用 solr5.5.1spring-data-solr 1.4.2.RELEASE。我已经用我的工作项目配置了 spring data solr 并且工作正常。但是当我使用模型类向 solr 插入数据时,它会自动使用模型类的相关字段更新 ma​​naged-schema 文件。在这个模型中,我没有使用多值类型,但 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 保存此类的对象时。然后 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"/>

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

【问题讨论】:

【参考方案1】:

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

无模式模式会创建多值字段,因为它不知道随着时间的推移这些值是单值还是多值。所以,还是要谨慎行事。

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

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

【讨论】:

是的,先生,我同意你的看法,但是使用 spring-data-solr 它将为模式创建字段。我们可以使用@Indexed注解来指定solr字段的数据类型。但它不起作用。这就是这里的问题。我仍然在手动编辑模式文件。【参考方案2】:

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

另外,我更改了 solrconfig.xml 中的默认实现。我有 tlongs to tlong .. etc for all the lst.

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

我不确定,它是否会在将来产生任何其他问题。现在,我可以看到这些字段正在接受单个值。

【讨论】:

以上是关于Spring data solr 总是创建多值字段的主要内容,如果未能解决你的问题,请参考以下文章

将 Solr 重复值删除到多值字段中

在 Solr 中对多值字段进行排序

Solr - 按多值字段上的OR搜索的最大匹配对结果进行排序

solr 通过配置多值字段动态字段来解决文本表达式查询精确到句子的问题

solr 通过配置多值字段动态字段来解决文本表达式查询精确到句子的问题20171214

如何使用spring-data-solr编写查询,返回特定字段的所有值的列表