[英]cts:value-match on xs:dateTime() type in Marklogic
我有一個變量$yearMonth := "2015-02"
我必須在元素Date as xs:dateTime
上將此日期搜索Date as xs:dateTime
。 我想使用正則表達式查找日期為“ 2015-02- ??”的所有文件/文檔。 我在ModifiedInfo/Date
上啟用了path-range-index
,我正在使用以下代碼,但得到了Invalid cast
錯誤
let $result := cts:value-match(cts:path-reference("ModifiedInfo/Date"), xs:dateTime("2015-02-??T??:??:??.????"))
我也用下面的代碼,並得到相同的錯誤
let $result := cts:value-match(cts:path-reference("ModifiedInfo/Date"), xs:dateTime(xs:date("2015-02-??"),xs:time("??:??:??.????")))
請幫助:)
似乎您正在嘗試對路徑范圍索引使用通配符搜索,該索引的數據類型為xs:dateTime()。
但是,當前MarkLogic不支持此功能。 有多種方法可以處理這種情況:
您可以運行以下解決方法以支持現有系統:
for $ x in cts:values(cts:path-reference(“ ModifiedInfo / Date”))返回if(starts-with(xs:string($ x),'2015-02'))然后$ x else()
該查詢將從詞典中獲取值,然后您可以過濾所需的日期。
您可以通過在and-query中結合幾個cts:element-range-querys來解決此問題:
let $target := "2015-02"
let $low := xs:date($target || "-01")
let $high := $low + xs:yearMonthDuration("P1M")
return
cts:search(
fn:doc(),
cts:and-query((
cts:element-range-query("country", ">=", $low),
cts:element-range-query("country", "<", $high)
))
)
如果要限制值的范圍,可以將多個cts:element-range-query構造函數與cts:and-query或其他任何可組合的cts:query構造函數組合在一起,如下面示例的最后一部分。
您也可以考慮使用cts:query參數執行cts:values來搜索例如2015-02-01和2015-03-01之間的值。 請注意,如果在一個文檔中出現多個日期,那么您畢竟需要手動過帳過濾器(如Navin的選項3),但這可能會大大加快后過濾的速度。
HTH!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.