簡體   English   中英

MarkLogic:將字符串轉換為cts:search中的路徑表達式

[英]MarkLogic: convert string to path expression in cts:search

如何在MarkLogic中創建一個函數,將XPath作為字符串,然后將其傳遞給cts:search函數?

我想做這樣的事情:

xquery version "1.0-ml";

declare namespace local = "http://www.local.com/" ;

declare function local:xpath-search($xpath as xs:string, $collection as xs:string, $limit  as xs:string) {
let $valid := cts:valid-index-path($xpath,fn:false())
let $results := cts:search(xdmp:value($xpath), cts:and-query(()) ) [position() < 100]
return 
    if ($valid = false()) then "xpath is invalid"
    else (
        if ($results = '') then "no results were found"
             else $results
        )
    } ;


local:xpath-search('//p', '', '')

但是,我得到了“表達是不可搜索的”錯誤。

使用http://docs.marklogic.com/search:search並使用<searchable-expression>選項提供它。

search:search功能已經實現了您想要的功能。 在引擎蓋下它調用cts:search並使用xdmp:value提供可搜索表達式。 你可以這樣做,但search:search已經編寫和測試。

順便說一句,使用基於路徑的可搜索表達式與cts:search是一個陷阱,對於粗心大意。 在大多數情況下,最好使用collection()作為cts:search的第一個參數cts:search ,匹配整個數據庫。 然后使用cts:query第二個參數,以匹配您感興趣的文檔。

但是//p怎么樣? 重要的是要了解MarkLogic索引片段而不是元素。 默認情況下,片段是文檔。 您可以更改:您甚至可以在//p級別進行分段。 但在大多數情況下,這是一個壞主意。 你可能最好使用cts:search匹配文檔,然后cts:highlight以查找段落中的匹配項。 search:search功能也支持它。

卡斯卡韋爾:

您可以嘗試將整個cts:search()表示為字符串(將靜態部分與路徑連接)並使用xdmp:value或xdmp:eval調用它。

希望有所幫助,

Erik Hennum

暫無
暫無

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

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