2013-04-18 2 views
2

У меня есть элемент контента Sitecore с полем даты с именем «EventDate». Я хочу искать эти предметы с определенной датой с помощью Lucene.Net.Как выполнить поиск Lucene с элементом Sitecore с определенной датой?

Ниже приведен код, я пытался, но я не получаю результат:

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/ru/Modules/Index_Viewer.aspx - очень удобный инструмент для проверки наличия в вашем индексе каких-либо элементов, и вы можете запустить свой запрос, используя это, а также проверить, не является ли ваш запрос неправильным. – Trayek

+0

Используете ли вы стандартное поле даты и времени Sitecore для 'EventDate'? –

+0

Да, я дважды проверил это. У меня есть другой метод, который принимает диапазон дат и возвращает список элементов. Этот метод работает. – hegdesachin

ответ

5

Вы используете стандартный Sitecore поле даты (переход к сырьевым значений просмотра), поэтому дата хранится в виде yyyyMMddTHHmmss строка, например:

20130418T140122 

А затем использовать TermQuery с первой частью только запроса, например:

20130418 

Таким образом, вы не видите никакого результата, так как TermQuery соответствует точному значению поля.

Вы должны либо попытаться WildcardQuery с 20130418* или использовать RangeQuery начиная с 20130418T000000 включая это значение и заканчивающийся 20130819T000000 исключением этого значения.

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

+0

Спасибо Марас. Это сработало !!! – hegdesachin

Смежные вопросы