2014-11-03 81 views
2

我有Sitecore項目與其他項目(與不同的模板)指的treelist屬性。 我的目標是使用ContentSearch api(lucene)在treelist屬性中查找包含項目B的項目A.Sitecore 7索引trellist lucene

我已經添加了樹形列表屬性,我的指數:

<indexConfigurations> 
    <defaultLuceneIndexConfiguration type="Sitecore.ContentSearch.LuceneProvider.LuceneIndexConfiguration, Sitecore.ContentSearch.LuceneProvider"> 
     <fieldMap    type="Sitecore.ContentSearch.FieldMap, Sitecore.ContentSearch"> 
     <fieldNames hint="raw:AddFieldByFieldName"> 
      <field patch:before="field[0]" fieldName="TreelistProperty" storageType="YES" indexType="UNTOKENIZED" vectorType="NO" boost="1f" type="System.String" 
       settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider"> 
      <analyzer type="Sitecore.ContentSearch.LuceneProvider.Analyzers.LowerCaseKeywordAnalyzer, Sitecore.ContentSearch.LuceneProvider" /> 
      </field> 
     </fieldNames> 
     </fieldMap> 
    </defaultLuceneIndexConfiguration> 
    </indexConfigurations> 

我期望Lucene的存儲樹形列表財產的GUID的串聯。

假設這是正確的,我的索引填充我的查詢看起來是這樣的:

master = Sitecore.ContentSearch.ContentSearchManager.GetIndex("sitecore_master_index"); 
using (var context = master.CreateSearchContext()) 
{ 
    var results = context.GetQueryable<SearchResultItem>() 
       .Where(x => x["TreelistProperty"].Contains("{456-41414-my-guid-here-1516}")) 
       .GetResults(); 
    var hits = results.Hits.ToArray(); 
} 

這將返回什麼。它出了什麼問題?

+0

您是否確定小寫您查詢的GUID值?如果我記得正確的話;所有GUID都以小寫形式進入索引。 – 2014-11-03 09:24:41

+0

有沒有試過。 – user1613512 2014-11-03 09:49:30

+0

所以我昨天試了這個。映射字段有IndexField(「lucene中的字段名稱」)public IEnumerable Values {get; set;}。然後按照阿曼的方法。很棒。 – Gabbar 2014-11-03 19:43:59

回答

4

你應該正常化你的guid,像這樣:

var master = Sitecore.ContentSearch.ContentSearchManager.GetIndex("sitecore_master_index"); 
using (var context = master.CreateSearchContext()) 
{ 
    Sitecore.Data.ID myId = ID.Parse("{456-41414-my-guid-here-1516}"); 
    string normalizedID = Sitecore.ContentSearch.Utilities.IdHelper.NormalizeGuid(myId); 
    var results = context.GetQueryable<SearchResultItem>() 
       .Where(x => x["TreelistProperty"].Contains(normalizedID)) 
       .GetResults(); 
      var hits = results.Hits.ToArray(); 
} 
0

我認爲guid值默認存儲在沒有大括號和破折號的情況下。在比較之前嘗試轉換爲ToShortId()。