У меня есть свойство в моем индексе (используя Advanced Database Crawler) для даты архива.
Я хочу найти все элементы, у которых дата нулевая или находится в будущем... Поиск по диапазону дат выполнит вторую часть, но как насчет первой?
У меня есть свойство в моем индексе (используя Advanced Database Crawler) для даты архива.
Я хочу найти все элементы, у которых дата нулевая или находится в будущем... Поиск по диапазону дат выполнит вторую часть, но как насчет первой?
Вы не можете выполнить поиск null в Lucene. Раньше я проверял поля emtpy и вставлял слово «ПУСТОЙ» в индекс. Затем при запросе индекса вам нужно добавить тест, который проверяет наличие (или отсутствие) этого термина. Делать это таким образом кажется немного грязным, но это единственное решение, которое я смог найти или придумать за 3 года работы с Sitecore и Lucene.
В классе 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);