2016-08-02 71 views
0

我在無模式模式下使用Solr 6.1。在創建一個樣本數據的集合和索引之後,創建的字段都被設置爲MultiValued = true,唯一的ID除外。Solr無模式創建字段爲MultiValued

問題是,當使用SolrNet查詢這些數據時,它不會將結果正確映射到模型。查詢結果作爲數組返回並要求模型中的所有屬性都更新爲ICollection類型。

是否有無論如何我們可以設置這些領域MultiValued =假索引樣本數據?

一個例子來說明這個問題:

1)索引在無模式模式以下模型的一個示例:

public class TestModel 
{ 
    [SolrUniqueKey("id")] 
    public int Id { get; set; } 

    [SolrField("guid")] 
    public Guid Guid { get; set; } 
} 

2)Solr的託管模式文件將具有以下字段

可以加入
<field name="guid" type="strings"/> 
    <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/> 

3)模型的查詢/映射過程中的錯誤

Object of type 'System.Collections.ArrayList' cannot be converted to type 
+0

因此,你問是否有一種方法在無模式下進行索引,並以某種方式設置一個字段只有singleValue,對嗎? – Mysterion

+0

是的,我試圖在無模式下運行Solr,但動態字段創建是將所有東西都創建爲多值類型。這樣做時將結果映射回模型而不將所有屬性轉換爲ICollection類型都會導致問題。 –

回答

4

無模式模式使得所有東西都變成multiValued,因爲它不知道您是否有單個值,然後是相同字段的多值值。因此它使所有字段具有多值性,並將數字類型升級到最大。

這很容易調整,如果你知道你的域名好。整個映射鏈在solrconfig.xml的更新請求處理器鏈(add-unknown-fields-to-the-schema)中定義,您可以將多值類型的類型映射更改爲等效的單值類型。對於字符串,您可以更改defaultFieldType中的值。

+0

感謝Alex,這是非常有用的信息,但是如果我將默認類型定義爲單個值類型,那麼當嘗試索引多值數組類型時會發生什麼?換句話說,這將如何影響創造領域的正常工作? –

+0

那麼,如果你手動這樣做,你怎麼知道每個新領域應該是單值還是多值?它是按名稱模式(並且您可以將映射應用於[只有一些字段](http://www.solr-start.com/javadoc/solr-lucene/org/apache/solr/update/processor/FieldMutatingUpdateProcessorFactory.html) )?你是否事先知道例外情況(例如[已發貨的電影示例](http://blog.outerthoughts.com/2015/11/oh-solr-home-where-art-thou/))?你想[只保留第一個/最後一個項目](http://www.solr-start.com/info/update-request-processors/#FieldValueSubsetUpdateProcessorFactory)? –

+0

迄今爲止,將默認值更改爲單值類型效果很好,沒有更多映射問題,因爲所有字段都是以單數類型創建的。現在我需要索引的所有字段都是單數類型,但不確定它是否會擴展到數組和複雜模型。不知道它會如何處理,我想我必須測試它才能看到。 –