簡體   English   中英

如何使用 Marklogic XQuery cts:search 獲取所需的數據

[英]How to get the data required using Marklogic XQuery cts:search

所以,我最近在 Marklogic 上接受了一家知名公司的采訪。 他問了我一個我無法回答的問題。 有一個 XML 示例數據,如下所示。

他問我如何使用搜索僅獲取zipcode12345statecalifornia員工 ID 喜歡cts:search

我想到的是像下面這樣寫 XPath 但因為他用搜索問我我無法回答

let $x :=//employee/officeAddress[zipCode="38023"]/../employeeId/string()
return $x

xml 數據集:

<employees>
  <employee>
    <employeeId>30004</employeeId>
    <firstName>crazy</firstName>
    <lastName>carol</lastName>
    <designation>Director</designation>
    <homeAddress>
      <address>900 clean ln</address>
      <street>quarky st</street>
      <city>San Jose</city>
      <state>California</state>
      <zipCode>22222</zipCode>
    </homeAddress>
    <officeAddress>
      <address>000 washington ave</address>
      <street>bonaza st</street>
      <city>San Francisco</city>
      <state>California</state>
      <zipCode>12345</zipCode>
    </officeAddress>
  <employee>
</employees>

對於熟悉 XML 技術並從 MarkLogic 開始的許多人來說,使用 XPath 是一個自然的初步想法。 這是我剛開始時第一次開始做的事情。

一些XPath 表達式可以通過數據庫進行優化並快速高效地執行,但也有一些不能也可能不會很好地執行。

使用cts:search和內置查詢構造可以優化表達式,利用索引,並允許您通過分析xdmp:planxdmp:query-metersxdmp:query-trace來進一步調整。

XPath 的等效cts:search表達式,在第一個$path參數中指定/employees/employee的路徑,並在第二個$query參數中將cts:element-value-querycts:and-query組合為:

cts:search(/employees/employee, 
  cts:and-query(( 
    cts:element-value-query(xs:QName("zipCode"), "12345"), 
    cts:element-value-query(xs:QName("state"), "California") )))/employeeId

您還可以使用更通用的$path來搜索所有文檔並使用xdmp:element-query()包圍cts:element-value-query條件以將搜索限制為employee元素的后代,然后將 XPath 放入結果文件:

cts:search(doc(), 
  cts:element-query(xs:QName("employee"), 
    cts:and-query(( 
      cts:element-value-query(xs:QName("zipCode"), "12345"), 
      cts:element-value-query(xs:QName("state"), "California") ))
  )
)/employees/employee/employeeId

xpath 我會嘗試(未測試):

/employees/employee[officeAddress/zipCode = '38023' and officeAddress/state = 'California']/employeeId/string()

請注意,您也可以在 xpath 上使用 xdmp:plan; 看看它與 cts:search 是如何工作的很有趣。

一般來說,你最好在 cts:search 與 xpath (我喜歡 xpath)中盡可能多地投入。

這個問題有點模棱兩可。 一份文件中有很多員工嗎? 還是很多員工文件? 兩個都?

另外,不要忘記添加適當的 position 索引,否則您將不會獲得太多未經過濾的幫助。 查看添加索引前后的計划。

另請參閱https://help.marklogic.com/Knowledgebase/Article/View/queries-constrained-to-elements

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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