Search Sitecore高级数据库爬虫程序空日期

Search Sitecore高级数据库爬虫程序空日期,search,sitecore,lucene.net,Search,Sitecore,Lucene.net,我的索引中有一个属性(使用高级数据库爬虫)用于存档日期 我想查找日期为空或将来为空的所有项目……日期范围搜索将完成第二部分,但第一部分如何?您不能对Lucene执行空搜索。我过去所做的是测试emtpy字段,并在索引中插入单词“EMPTY”。然后,当查询索引时,您需要添加一个测试来检查该术语的存在(或不存在)。这样做感觉有点脏,但这是我在与Sitecore和Lucene合作的3年中找到或想出的唯一解决方案。在DateFieldCrawler类中,我们修改了以下代码: public override

我的索引中有一个属性(使用高级数据库爬虫)用于存档日期


我想查找日期为空或将来为空的所有项目……日期范围搜索将完成第二部分,但第一部分如何?

您不能对Lucene执行空搜索。我过去所做的是测试emtpy字段,并在索引中插入单词“EMPTY”。然后,当查询索引时,您需要添加一个测试来检查该术语的存在(或不存在)。这样做感觉有点脏,但这是我在与Sitecore和Lucene合作的3年中找到或想出的唯一解决方案。

在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);

凯尔-我们就是这么做的。Alex Shyba给了我一些说明,说明了当日期字段存储在索引中时如何修改它——因此我用DateTime.MinValue替换了空值——这使它能够工作。