簡體   English   中英

Marklogic中xs:dateTime()類型的cts:value-match

[英]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不支持此功能。 有多種方法可以處理這種情況:

  1. 您可以創建字段索引。
  2. 您可以將其更改為支持通配符搜索的字符串索引。
  3. 您可以運行以下解決方法以支持現有系統:

    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: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM