2013-04-18 2 views
2

콘텐츠 항목은 'EventDate'라는 날짜 필드가있는 Sitecore입니다. Lucene.Net을 사용하여 특정 날짜의 항목을 검색하고 싶습니다. 다음은 특정 날짜의 Sitecore 항목으로 Lucene 검색을 수행하는 방법은 무엇입니까?

내가 해봤 코드입니다하지만 난 결과를 얻고 있지 않다 :

var index = SearchManager.GetIndex("event_search_index"); 
var items = new List<EventDetailItem>(); 
var eventDateString = eventDate.Year.ToString("D4") + eventDate.Month.ToString("D2") + eventDate.Date.Day.ToString("D2"); 

using (var context = new IndexSearchContext(index)) 
{ 
    var searchTerm = new Lucene.Net.Index.Term("EventDate", eventDateString);  
    var query = new Lucene.Net.Search.TermQuery(searchTerm); 
    var topFieldDocs = context.Searcher.Search(query, 1);  
    if (topFieldDocs != null) 
    { 
     var scoreDocs = topFieldDocs.ScoreDocs; 
     foreach (var scoreDoc in scoreDocs) 
     { 
      var doc = context.Searcher.Doc(scoreDoc.doc); 
      var uriField = doc.GetField("_url"); 
      var itemUri = new Sitecore.Data.ItemUri(uriField.StringValue()); 
      var item = Sitecore.Context.Database.GetItem(itemUri.ToDataUri()); 

      if (item == null) continue; 

      var eventItem = new EventDetailItem(item); 
      items.Add(eventItem); 
     } 
    } 
} 
+0

색인에 항목이 있는지 다시 확인 했습니까? http://marketplace.sitecore.net/en/Modules/Index_Viewer.aspx는 색인에 어떤 것이 있는지 확인하는 매우 편리한 도구이며 쿼리를 잘못 실행했는지 확인하기 위해 쿼리를 실행할 수도 있습니다. – Trayek

+0

'EventDate'에 표준 Sitecore datetime 필드를 사용합니까? –

+0

네, 두 번 확인했습니다. 날짜 범위를 사용하고 항목 목록을 반환하는 다른 방법이 있습니다. 이 방법이 효과적입니다. – hegdesachin

답변

5

당신은 (볼 원시 값으로 전환) 표준 Sitecore 날짜 필드를 사용하고 그렇게 날짜로 저장됩니다 yyyyMMddTHHmmss 문자열, 예 :

20130418T140122 

그리고 당신은 쿼리의 첫 번째 부분 TermQuery를 사용, 예 :

20130418 

TermQuery은 정확한 필드 값과 일치하므로 아무 결과도 표시되지 않습니다.

당신은 20130418*WildcardQuery을 시도하거나이 값을 포함하여이 값을 제외한 20130819T000000에 종료 20130418T000000부터 RangeQuery를 사용해야 하나.

Here you can find more information about troubleshooting Sitecore and Lucene problems.

+0

감사합니다. Maras. 그게 효과가! – hegdesachin