![](/img/trans.png)
[英]MarkLogic 8 - XQuery - cts:search - Change database programmatically
[英]How to get the data required using Marklogic XQuery cts:search
所以,我最近在 Marklogic 上接受了一家知名公司的采訪。 他問了我一個我無法回答的問題。 有一個 XML 示例數據,如下所示。
他問我如何使用搜索僅獲取zipcode
為12345
且state
是california
的員工 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:plan
、 xdmp:query-meters
和xdmp:query-trace
來進一步調整。
XPath 的等效cts:search
表達式,在第一個$path
參數中指定/employees/employee
的路徑,並在第二個$query
參數中將cts:element-value-query
與cts: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.