2017-05-31 125 views
2

我試圖返回一個使用iQuery查詢的課程列表,但我有一些日期比較的問題。Sitecore日期比較不返回預期結果

IM目前使用的與將來的日期返回課程代碼

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

,但是它不會返回在同一天,結束與比DateTime.UtcNow返回的時間後結束的時間課程。

任何想法我做錯了什麼?

我剛用盧克檢查指標,如果我使用

end_date:[20170531t092205609z TO *] 

我回來,我需要確切的結果但在日誌中的實際查詢使用

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

然後我得到更多的結果包括我失蹤的課程。

爲什麼

a) i get more results back using the second query? 
b) Why is i that in my c# code the results returned do not match the search results? 
+0

你能在搜索日誌文件檢查什麼是查詢被髮送到索引? –

+0

@MarekMusielak這是發送28688 10:22:05信息ExecuteQueryAgainstLucene(website_web_event_search_index):+ end_date:[20170531t092205609z TO *] + _template:a84b75fccac64ea7474f4b71e628adc - Filter: –

回答

0

也有類似的問題,在這裏描述了我們的解決方案:https://ggullentops.blogspot.be/2015/12/sitecore-lucene-index-and-datetime.html

我們的問題有2個原因:

  • 第一個原因是,Sitecore的存儲其在UTC DateTime是否(這與我們當地的一個小時的時間差)
  • 第二個原因是,Sitecore的使用「T」在日期中以小寫形式在查詢中。但在我的索引中,它們都是大寫字母。如果我使用Luke嘗試查詢,它的確會給我錯誤的結果..當我在Luke中更改查詢以使用大寫字母T時,它的工作正確..

我們找到的最簡單的解決方案是指標配置:

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

(注意格式=「...」)

+0

事情是我得到的結果,即使與小寫字母t –