筆記一下,因為之前都是做關鍵字搜尋,其實國外有人寫過範圍搜尋範例,
我只是小咖,只是他們加入許許多多條件,花了一點時間才搞懂,這方法不一定是最好的..
但是至少解決我暫時遇到的範圍搜尋..
public List<Dict> SearchDateRangeSample(string searchContent)
{
DirectoryInfo dirInfo = new DirectoryInfo(ArticlePath);
FSDirectory dir = FSDirectory.Open(dirInfo);
IndexSearcher search = new IndexSearcher(dir, true);
List<Dict> lst = new List<Dict>();
Filter f=new RangeFilter("DateField", "20120101","20120622",true,true);
Query q = new MatchAllDocsQuery();
FilteredQuery filteredQuery = new FilteredQuery(q, f);
Hits hits = search.Search(filteredQuery, f);
for (int i = 0; i < hits.Length(); i++)
{
Dict dm = new Dict();
dm.Tag = hits.Doc(i).GetField("Tag").StringValue();
dm.Id = hits.Doc(i).GetField("Id").StringValue();
dm.Date1 = DateTime.ParseExact(hits.Doc(i).GetField("Date1").StringValue(), "yyyyMMdd", CultureInfo.InvariantCulture);
lst.Add(dm);
}
return lst;
}
Dict 只是我訂立的物件名稱,暫時先不用看他
其中..
Filter f=new RangeFilter("DateField", "20120101","20120622",true,true);
這Filter 使用 RangeFilter 並且決定 起始值為 20120101 最大為 20120622 後面兩個 true 的意思是 搜尋時也包含 最大跟最小值 不要忽略…
當然時間的部分,我在做index 的時候 編碼為 yyyyMMdd 方便我進行搜尋...
這樣很簡單幾行來實現範圍搜尋…
之後期更詳細的解說做法 請參考 此篇