2011-03-29 56 views
2

經過幾個小時的Lucene判斷後,我放棄了。希望你能幫助。Sitecore 6.4 + Lucene - 模板繼承

設置

在我們當前的Sitecore的樹,我們有模板2模板繼承水平。 (比方說車 - >車 - >一級方程式/車輛 - >船)。

什麼,我需要通過Lucene的現在去取,是每一個ContentItem inheritting 直接,或間接,從某個模板。

例如:

  • 獲取車輛 - >回報: 「通用」 車,轎車,F1車,船
  • 獲取汽車 - >回報:汽車,F1汽車

我以爲在使用Lucene中的_templates字段,即:
獲取車輛 - >_templates contains車輛模板GUID。 Get Cars - >_templates包含Car-template-guid。

問題

我遇到的主要問題是,F1賽車的內容項-template包含的汽車和F1賽車在_templates -field,並通用「車輛」。

我可能會誤解_templates-field,但是想知道是否還有其他選項。


Sitecore的配置:

內容項目:

  • Sitecore的
    • 內容
      • 首頁
        • ACategory
          • A子1
          • 甲兒童1。1
          • A子2

模板(水平=繼承):

  • 主要實體
    • 兒童實體1
      • 兒童實體1.1​​
    • 兒童實體2
  • 類別
+1

你正在使用什麼Lucene方法? 「舊」Lucene方法還是「新」方法?您是否使用[高級數據庫爬蟲](http://sitecoreblog.alexshyba.com/2010/11/sitecore-searcher-and-advanced-database.html)? – 2011-03-29 13:56:13

+0

我們正在開發自定義索引,由自定義爬網程序繼承Sitecore.Search.Crawlers.DatabaseCrawler維護。該履帶式工具還將我們的一些自定義字段添加到該項目中。 - 目前,我正在嘗試的解決方案是將item.Template.ID.Guid和(遞歸)寫入每個baseTemplate.Guid到一個新字段。我認爲這會起作用(它與_path-field非常相似,僅用於模板繼承),我會讓你知道的。 – sanderd 2011-03-29 14:06:28

回答

2

創建一個新的索引,其繼承Sitecore.Data.Indexing .Index,並覆蓋AddFields方法,如下所示:

protected override void AddFields(Item item, Document document) 
{ 
    // Add base fields 
    base.AddFields(item, document); 

    // Add all inherited templates id to a field 
    string TEMPLATE-PATH="get template path for this item here"; 
    document.Add(new Field("template-path", TEMPLATE-PATH, Field.Store.NO, Field.Index.TOKENIZED)); 
} 

然後你就可以通過「模板路徑」欄搜索。

+0

正如前面提到@原文的評論,我正在使用新的Sitecore Lucene方法。然而,你提到的是,類似於我如何解決這個問題:添加了一個新的字段,包括整個模板層次結構。感謝馬克和基耶薩,將這一個標記爲答案。 – sanderd 2011-03-30 08:48:47

+0

我的意思是,不是新的搜索器,而是一個新的索引器。 在配置中,您可以編輯索引如下, chiesa 2011-03-30 09:24:08