Нулевые даты Sitecore Advanced Database Crawler

У меня есть свойство в моем индексе (используя Advanced Database Crawler) для даты архива.

Я хочу найти все элементы, у которых дата нулевая или находится в будущем... Поиск по диапазону дат выполнит вторую часть, но как насчет первой?


person Brian Beckham    schedule 03.07.2012    source источник


Ответы (2)


Вы не можете выполнить поиск null в Lucene. Раньше я проверял поля emtpy и вставлял слово «ПУСТОЙ» в индекс. Затем при запросе индекса вам нужно добавить тест, который проверяет наличие (или отсутствие) этого термина. Делать это таким образом кажется немного грязным, но это единственное решение, которое я смог найти или придумать за 3 года работы с Sitecore и Lucene.

person Kyle Heon    schedule 05.07.2012
comment
Кайл, мы так и сделали. Алекс Шиба дал мне несколько инструкций о том, как изменить поле даты, когда оно хранится в индексе, поэтому я заменил пустое значение на DateTime.MinValue, что позволило ему работать. - person Brian Beckham; 05.07.2012

В классе DateFieldCrawler мы изменили следующий код:

public override string GetValue()
{
 if (String.IsNullOrEmpty(_field.Value))
 {
     return DateTools.DateToString(DateTime.MinValue, DateTools.Resolution.DAY);
 }

 if (FieldTypeManager.GetField(_field) is DateField)
 {
    var dateField = new DateField(_field);

    if(dateField.DateTime > DateTime.MinValue)
    {
       return DateTools.DateToString(dateField.DateTime, DateTools.Resolution.DAY);
    }
 }

 return String.Empty;
}

Сохранив это значение, мы смогли выполнить следующие запросы, чтобы включить даты с нулевым значением:

DateRangeSearchParam.DateRange toFirstDate =
                    new DateRangeSearchParam.DateRange(EVENT_FIRST_DATE,     
                    DateTime.MinValue, toDate.Value);
toFirstDate.InclusiveEnd = false;
eventDates.Add(toFirstDate);
person Brian Beckham    schedule 05.07.2012