2016-08-14 56 views
2

我正在與solr5.5.1spring-data-solr 1.4.2.RELEASE。我已經配置了我的工作項目的spring data solr,並且工作正常。但是當我使用模型類插入數據到solr時,它會使用model類的relavent字段自動更新託管模式文件。在此模型中,我沒有使用多值類型,但spring-data-solr將託管模式文件更新爲多值屬性。爲什麼發生?模型類的 樣品字段聲明彈簧數據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"/> 

這裏的字段是多值的。這裏發生了什麼,我該如何解決這個問題?

回答

0

我有同樣的問題,但我嘗試使用下面的建議實現。 Spring Data Solr: how to set multiValue to false when declaring a field

此外,我更改了solrconfig.xml中的默認實現。我對所有的一切都有不同的看法。

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

我不確定,如果將來會產生其他問題。現在,我能夠看到這些字段正在接受單一的價值。

0

我不相信Spring會管理模式的創建。它假定您的所有字段都已被定義。因此,您正在使用在solrconfig.xml中定義的無模式模式創建模式。

而無模式模式會創建多值字段,因爲它不知道這些值是隨時間變化的單值還是多值。所以,它在謹慎的方面犯錯。

最好的辦法是通過編輯架構文件和重新加載或使用提供接口的新管理界面來顯式創建您想要的架構。

或者您可以修改無模式匹配定義來創建單數字段,但如果其中一個字段是多值字段,則會失敗。除非你使用模式來指定它們中的哪一個應該是單數的,哪一個是多值的。但是到那時你不妨直接宣佈它們。

+0

我同意你的先生,但是用spring-data-solr它會爲模式創建領域。我們可以使用@Indexed註釋來指定solr字段的數據類型。但它不起作用。這就是問題。仍然我手動編輯架構文件。 –