考慮情形,假設資料庫有記錄一件事情開始的時間和結束的時間的表。現在需要對其進行檢索,要求查詢某一時間段內的資料,只要和時間區間有交集就符合檢索條件。那麼,總共可能出現6種情況(如圖)。
相交的有4中情況,要實現匹配可以做以簡單歸納,有兩種實現考慮:
(startt在st `和et `之間)與 (st `在startt和endt之間)
(et `<startt)或(st `>endt),然後對這一整個表示式取反
public query getqueryofseastr(iheaderdictionary keyvaluepairs)
/****************************時間間隔匹配篩選設定********************************/
datetime qssj = keyvaluepairs.getvalue("qssj");//獲取起始時間
datetime jssj = keyvaluepairs.getvalue("jssj");//獲取結束時間
//一種情況,start在qssj和jssj之間
var rangequery_1 = numericrangequery.newint64range("start", qssj.tofiletimeutc(), jssj.tofiletimeutc(), true, true);
//一般涉及到的時間不超過這個區間,權且這樣設定時間界限
datetime min = new datetime(1700, 1, 1, 0, 0, 0); //最小時間界限
datetime max = new datetime(2999, 12, 31, 23, 59, 59); //最大時間界限
//另一種情況,jssj在start和end之間
var rangequery_2_1 = numericrangequery.newint64range("start", min.tofiletimeutc(), jssj.tofiletimeutc(), false, true);
var rangequery_2_2 = numericrangequery.newint64range("end", qssj.tofiletimeutc(), max.tofiletimeutc(), true, false);
//設定情況1為&
booleanquery queryand_1 = new booleanquery
};//設定情況2為&
booleanquery queryand_2 = new booleanquery,};
//設定情況1||情況2,至此完成了最終的時間區間匹配篩選
booleanquery queryor_1 = new booleanquery,};
booleanquery re = new booleanquery,};
return re;
}
第一次寫,有不對之處還望指出。源**可以可參看搜尋「lucene時間區間」,希望多多支援原創。 Lucene實用的分詞匹配
本篇主要說乙個lucene使用多個條件同時匹配的情況,如圖所示 這個檢索表示四個條件同時滿足的結果,其中分類關鍵categoryname這個唯一字段,年級與科目比較複雜,它們兩個同時關聯propertyname欄位,字段內容用 分割,關鍵字它關鍵所有字段,在web專案中,首先需要對年級與科目進行處理...
thinkphp6的時間區間查詢
thinkphp6之後 就沒辦法在使用thinkphp5的時間查詢方法了 這裡有thinkphp6自帶的方法 thinkphp6查詢表示式官方文件鏈結 date 2020 06 01 00 00 00 首先先宣告乙個開始時間 然後將日期格式的時間轉成時間戳 begintime strtotime d...
Lucene的組合查詢
在lucene中實現組合查詢的方法很多,我目前用過的方法有三種,使用multifieldqueryparser,使用filter,使用boolean query。1.使用multifieldqueryparser 構建parser的時候使用multifieldqueryparser,查詢時便可以同時...