我想包含一個相關文檔(Sitecore--具體來說,Lucene文檔是Item
),這樣當Lucene索引爲A類型的項目創建文檔時,也包括來自另一個項目B的所有屬性。以編程方式擴展Lucene文檔和其他字段
最終結果是,當用戶搜索在項目B上找到的數據時,用戶在項目A上得到一個命中。本質上,我想我試圖以編程方式「擴展」Lucene文檔。
這是我的代碼到目前爲止。我擴展了索引器類,並重寫了一個方法,我在其中添加項目B到項目A(上下文文檔)的字段。在我的web.config
中,我用自定義的數據庫爬蟲類添加了一個特定的搜索索引(用於調試速度)。
public class DatabaseCrawlerExtension : Sitecore.Search.Crawlers.DatabaseCrawler
{
protected override void AddAllFields(Lucene.Net.Documents.Document document, Sitecore.Data.Items.Item item, bool versionSpecific)
{
base.AddAllFields(document, item, versionSpecific);
string fieldName;
if (/* item is of template A */)
{
var targetItems = /* get items based on a property */;
foreach (var additionalIndexItem in targetItems)
{
foreach (var fieldKey in additionalIndexItem.Fields
.Select(f => f.Key)
.Where(fk => !fk.StartsWith("_")))
{
document.Add(base.CreateValueField(fieldKey, additionalIndexItem[fieldKey]));
}
}
}
}
}
我已經調試此代碼,可以看到它擊中排隊叫號document.Add
,與被添加的正確的數據。我嘗試不同的方法是先調用base
方法,然後嘗試使用方法AddSpecialFields
而不是AddAllFields
。這並沒有在索引中產生任何額外的數據。
要調試/查看索引,我一直在重建索引(在Sitecore中)並查看最終結果,以及使用名爲Luke的工具直接查看生成的索引文件。
感謝盧克和'Field.Store'點 - 工具然而相當複雜的使用,所以我傾向於使用它只是爲了確認最終結果 – Simeon
我將嘗試使用上'Field'構造 – Simeon