Sitecore日期比较不会返回预期结果

问题描述 投票:2回答:1

我正在尝试使用iqueryable查询返回课程列表,但是我遇到了一些日期比较的问题。

我目前正在使用该代码

query = query.Where(r => r.EndDate >= DateTime.UtcNow);

返回将来会有日期的课程,但是它不会返回在同一天结束的课程,其结束时间晚于DateTime.UtcNow返回的时间。

我有什么想法我做错了吗?

我刚刚用Luke来检查索引,如果我使用的话

end_date:[20170531t092205609z TO *]

我得到了我需要的确切结果,但是在实际查询使用的日志中

+end_date:[20170531t092205609z TO *] +_template:a84b75fccac64eafa746f4b71e628adc - Filter : 

然后我得到更多的结果,包括我失踪的课程。

a)为什么我使用第二个查询得到更多结果? b)为什么在我的C#代码中返回的结果与搜索结果不匹配?

sitecore sitecore8
1个回答
1
投票

有一个类似的问题,并在这里描述我们的解决方案:https://ggullentops.blogspot.be/2015/12/sitecore-lucene-index-and-datetime.html

我们的问题有两个原因:

  • 第一个原因是Sitecore将其DateTimes存储为UTC(与当地时间相差一小时)
  • 第二个原因是Sitecore在日期中使用“t”作为查询中的小写。在我的索引中,它们都是大写的。如果我用Luke尝试查询它确实给了我错误的结果..当我在Luke中更改查询以使用大写T时它可以正常工作..

我们发现最简单的解决方案是索引配置中的format属性:

<field fieldName="datefrom" storageType="YES" indexType="UNTOKENIZED" vectorType="NO" boost="1f" 
format="yyyyMMdd" type="System.DateTime" 
settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider"/>

(注意格式=“......”)

© www.soinside.com 2019 - 2024. All rights reserved.