2014-03-07 1 views
0

Sitecore에는 multilist 필드가있는 항목이 있습니다. 필드는 저장되고 색인이 생성되므로이 구문을 사용하여 필드를 쿼리 할 수 ​​있습니다. 항목이 multilist 필드 apps_or에서 하나 개 이상의 값을 가질 때IProviderSearchContext에서 GetQueryable을 사용하여 빈 다 중자가 검색

using (var context = ContentSearchManager.GetIndex("sitecore_web_index").CreateSearchContext()) 
{ 
    var templateId = new ID(Config.NewsTemplate); 
    var q = context.GetQueryable<NewsSearchResultItem>().Where(x => x.Language == searchContext.Language && x.TemplateId == templateId); 

     var appIdPrd = PredicateBuilder.True<NewsSearchResultItem>(); 
     foreach (var t in searchContext.AppIds) 
     { 
      var id = GetId(t); 
      appIdPrd = appIdPrd.Or(p => p.AppIdOr.Contains(id)); 
     } 
     q = q.Where(appIdPrd); 

    List<NewsItem> items = new List<NewsItem>(q.Count()); 
} 

class NewsSearchResultItem : SearchResultItem 
{ 
    public string Title { get; set; } 
    public string Body { get; set; } 
    [IndexField("apps_or")] 
    public List<ID> AppIdOr { get; set; } 
} 

그것은 작동합니다. 그러나 multilist 필드에 항목이없는 항목도 검색하려고합니다.

q = q.Where(x => x.AppIdOr.Count == 0); 

이 허용되지 않습니다 :

q = q.Where(x => x.AppIdOr == null); 

어떤 아이디어가 이 결코 항목을 반환하지?

답변

2

Lucene은 검색 할 lucene에 대해 색인 된 값이 없기 때문에 null 값 검색 방법을 알지 못합니다. 색인을 생성 할 때 필드가 비어 있거나 null (예 : 사용자 지정 필드 또는 계산 된 필드 사용) 인 경우 (예 : ID.Null) 기본 값을 추가 한 다음 검색 쿼리에서 ID.Null을 검색 할 수 있습니다 . 전에 시도한 적이 없지만 작동한다고 생각합니다.