콘텐츠 항목은 '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);
}
}
}
색인에 항목이 있는지 다시 확인 했습니까? http://marketplace.sitecore.net/en/Modules/Index_Viewer.aspx는 색인에 어떤 것이 있는지 확인하는 매우 편리한 도구이며 쿼리를 잘못 실행했는지 확인하기 위해 쿼리를 실행할 수도 있습니다. – Trayek
'EventDate'에 표준 Sitecore datetime 필드를 사용합니까? –
네, 두 번 확인했습니다. 날짜 범위를 사용하고 항목 목록을 반환하는 다른 방법이 있습니다. 이 방법이 효과적입니다. – hegdesachin