2013-12-17 41 views
4

我剛開始使用SOLR與Sitecore 7集成。我設法遵循一些指南,並構建了一個「POCO」類(繼承自SearchResultItem),它允許我執行LINQ查詢和搜索數據,如下面的示例所示:Sitecore 7 LinQ POCO類 - 如何從Treelist獲取數據?

public class MySearchItem: SearchResultItem 
{ 
    [IndexField("Text Field")] 
    public string TextField 
    { 
     get; 
     set; 
    } 

    [IndexField("Drop Link")] 
    public ID DropLink 
    { 
     get; 
     set; 
    } 

    [IndexField("Tree List")] 
    public IEnumerable<ID> TreeList 
    { 
     get; 
     set; 
    } 
} 

當我執行查詢,使用下面的代碼,我觀察文本字段,並在結果項目DropLink屬性正確填充,與內容和ID分別爲TextField和DropLink。然而TreeList屬性被檢索爲null。我檢查了顯而易見的內容,並確保提示正確反映sitecore模板中的字段名稱,並根據sitecore 7的「項目存儲桶和搜索開發人員指南」文檔自動支持IEnumerable。因爲到results.First通話

var index = ContentSearchManager.GetIndex("sitecore_master_index"); 

using (var context = index.CreateSearchContext()) 
{ 
    var results = context.GetQueryable<MySearchItem>(); 

    results = results.Where(item => item.TemplateName == "Custom Sitecore Template"); 
} 

場位於索引()「的TreeList」]似乎顯示出我後的數據。這是否是讀取數據的正確方法?

此外,是否可以在我的「POCO」課程中添加其他類型的內容?比方說,我想查詢樹列表中的項目的屬性。我將如何去實施這個?我是否正確地假設我的樹列表類型的TypeConverter需要sitecore正確解析TreeList中除ID之外的類型以執行類似下面的操作?

[IndexField("Tree List")] 
public IEnumerable<TreeListItem> TreeList 
{ 
    get; 
    set; 
} 

任何幫助/指導理解這種行爲將不勝感激。

謝謝!

更新

在這篇文章建議我已經申請這個bug報告。如果有人遇到這個,他們確認這是一個問題,並提出了以下解決方法:

以下行添加到Sitecore.ContentSearch.Solr.Indexes.config文件的部分:

<typeMatch typeName="guidCollection"  type="System.Collections.Generic.IEnumerable`1[System.Guid]" fieldNameFormat="{0}_sm" multiValued="true" settingType="Sitecore.ContentSearch.SolrProvider.SolrSearchFieldConfiguration, Sitecore.ContentSearch.SolrProvider" /> 
<typeMatch typeName="stringCollection" type="System.Collections.Generic.IEnumerable`1[System.String]" fieldNameFormat="{0}_sm" multiValued="true" settingType="Sitecore.ContentSearch.SolrProvider.SolrSearchFieldConfiguration, Sitecore.ContentSearch.SolrProvider" /> 
<typeMatch typeName="intCollection"   type="System.Collections.Generic.IEnumerable`1[System.Int32]"  fieldNameFormat="{0}_im" multiValued="true" settingType="Sitecore.ContentSearch.SolrProvider.SolrSearchFieldConfiguration, Sitecore.ContentSearch.SolrProvider" /> 

希望這可以幫助!

回答

4

我有同樣的問題,並從檢查配置文件Sitecore.ContentSearch.Solr.Indexes.config似乎該類型未與Solr提供程序映射。

這是因爲文檔開發者指南項水桶確實怪異和搜索,它明確指出,開箱即用,應該能夠映射類型的IEnumerable<T>

您可以嘗試將您的多項選擇字段的類型從IEnumerable<ID>更改爲List<Guid>,並檢查是否可以解決您的問題?

+0

工作馬上!謝謝。 –

+6

您應該將此報告給Sitecore支持作爲文檔或配置錯誤 –