0
我想在solrnet中實現一個自定義的IReadOnlyMappingManager,以允許我們使用我們自己的Attribute類型來裝飾表示我們的solr索引記錄的文檔的屬性。由於我只需要更換GetFields和GetUniqueKey方法的執行,目前執行情況如下:在solrnet中實現一個自定義的IReadOnlyMappingManager
public class CustomMappingManager : AttributesMappingManager
{
public new ICollection<KeyValuePair<PropertyInfo, string>> GetFields(Type type)
{
IEnumerable<KeyValuePair<PropertyInfo, IndexFieldAttribute[]>> mappedProperties = this.GetPropertiesWithAttribute<IndexFieldAttribute>(type);
IEnumerable<KeyValuePair<PropertyInfo, string>> fields = from mapping in mappedProperties
select new KeyValuePair<PropertyInfo, string>(mapping.Key, mapping.Value[0].FieldName ?? mapping.Key.Name);
return new List<KeyValuePair<PropertyInfo, string>>(fields);
}
public new KeyValuePair<PropertyInfo, string> GetUniqueKey(Type type)
{
KeyValuePair<PropertyInfo, string> uniqueKey;
IEnumerable<KeyValuePair<PropertyInfo, IndexUniqueKeyAttribute[]>> mappedProperties = this.GetPropertiesWithAttribute<IndexUniqueKeyAttribute>(type);
IEnumerable<KeyValuePair<PropertyInfo, string>> fields = from mapping in mappedProperties
select new KeyValuePair<PropertyInfo, string>(mapping.Key, mapping.Value[0].FieldName ?? mapping.Key.Name);
uniqueKey = fields.FirstOrDefault();
return uniqueKey;
}
}
這種類型已經成功連接好使用structuremap和mappingManager在我ISolrOperations的具體實例是一個實例這個CustomMappingManager類型。
我已經將堆棧跟蹤直接下載到Solrnet實現中的Viistors中進行實際工作;這些具有CustomMappingManager實例。不幸的是,這種類型的GetFields和GetUniqueKey方法永遠不會被調用,我的文檔總是空的。
任何想法非常歡迎。
出於好奇,爲什麼要使用自己的屬性?他們有沒有額外的信息? – 2011-02-25 12:33:09
我認爲其目的是消除對SolrNet類型的依賴;它不賦予任何額外的功能。我從一位同事幾個月前做過的一些研究代碼中挑選出來,並且花了幾天的時間,現在我不相信有必要進行隔離。 – Jason 2011-02-25 14:47:45