我的内容项是Sitecore,日期字段名为'EventDate'。我想使用Lucene.Net搜索具有特定日期的项目。
以下是我尝试的代码,但我没有得到结果:
var index = SearchManager.GetIndex("event_search_index");
var items = new List<EventDetailItem>();
var eventDateString = eventDate.Year.ToString("D4") + eventDate.Month.ToString("D2") + eventDate.Date.Day.ToString("D2");
using (var context = new IndexSearchContext(index))
{
var searchTerm = new Lucene.Net.Index.Term("EventDate", eventDateString);
var query = new Lucene.Net.Search.TermQuery(searchTerm);
var topFieldDocs = context.Searcher.Search(query, 1);
if (topFieldDocs != null)
{
var scoreDocs = topFieldDocs.ScoreDocs;
foreach (var scoreDoc in scoreDocs)
{
var doc = context.Searcher.Doc(scoreDoc.doc);
var uriField = doc.GetField("_url");
var itemUri = new Sitecore.Data.ItemUri(uriField.StringValue());
var item = Sitecore.Context.Database.GetItem(itemUri.ToDataUri());
if (item == null) continue;
var eventItem = new EventDetailItem(item);
items.Add(eventItem);
}
}
}
答案 0 :(得分:5)
您正在使用标准 Sitecore 日期字段(切换到原始值视图),因此日期存储为yyyyMMddTHHmmss
字符串,例如:
20130418T140122
然后您只将TermQuery
与查询的第一部分一起使用,例如:
20130418
因此,TermQuery
与精确字段值匹配时,您看不到任何结果。
您应该WildcardQuery
与20130418*
一起尝试,或者使用RangeQuery
从20130418T000000
开始,包括此值,并以20130819T000000
结尾,不包括此值。
Here you can find more information about troubleshooting Sitecore and Lucene problems.