如果某些文檔具有空值元素,則在日期字段上使用 element-range-query 搜索 (Search with element-range-query on date field if some of the documents have empty-value elements)


問題描述

如果某些文檔具有空值元素,則在日期字段上使用 element‑range‑query 搜索 (Search with element‑range‑query on date field if some of the documents have empty‑value elements)

我在 modificationDateTime 元素上創建了一個元素範圍索引。

我們的 xml 是這樣的:

<data>
  <id>456789</id>
  <modificationDateTime>2018‑10‑15T15:16:37.047Z</modificationDateTime>
  <otherElementsFollow> ... </otherElementsFollow>
</data>

我正在使用以下查詢以獲取 2018 年 10 月 15 日 甚至 15 日至 16 日的文檔:

cts:search(/, (
    cts:and‑query((
       cts:directory‑query("/my‑directory/", "1")
       , cts:element‑range‑query(xs:QName("modificationDateTime"), ">=", xs:dateTime("2018‑10‑15T00:00:00.000+05:30"))
       , cts:element‑range‑query(xs:QName("modificationDateTime"), "<=", xs:dateTime("2018‑10‑15T23:59:59.000+05:30"))
    ))
)

運行查詢時出現以下錯誤:

[1.0‑ml] XDMP‑CAST: (err:FORG0001) cts:search(fn:collection(), cts:and‑query((cts:directory‑query("/my‑directory/", "1"), cts:element‑range‑query(xs:QName("modificationDateTime"), ">=", xs:dateTime("2018‑10‑15T00:00:00+05:30"), (), 1), cts:element‑range‑query(xs:QName("modificationDateTime"), "<=", xs:dateTime("2018‑10‑15T23:59:59+05:30"), (), 1)), ())) ‑‑ Invalid cast: "" cast as xs:dateTime

經過一些分析,我發現有些 XML 的 元素值為空,例如:

<data>
  <id>1234567</id>
  <modificationDateTime></modificationDateTime>
  <otherElementsFollow> ... </otherElementsFollow>
</data>

所以這就是導致此問題的原因,我們可以'不刪除這個元素,我們也不能有一些值,因為空是一個有效值。

關於如何在空元素上使用範圍索引搜索的任何幫助,理想情況下,它應該考慮這些記錄,但是當我將空值更新為有效的 dateTime 值時,相同的查詢可以正常工作。


參考解法

方法 1:

If excluding the documents with those empty elements is an option, you could append this not‑query to your and‑query to do so:

cts:not‑query(
  cts:element‑value‑query(xs:QName("modificationDateTime"), "")
)

HTH!

(by Prakash Kgrtjn)

參考文件

  1. Search with element‑range‑query on date field if some of the documents have empty‑value elements (CC BY‑SA 2.5/3.0/4.0)

#cts-search #marklogic #marklogic-9






相關問題

如果某些文檔具有空值元素,則在日期字段上使用 element-range-query 搜索 (Search with element-range-query on date field if some of the documents have empty-value elements)







留言討論