2016-11-25 103 views
1

我有標記的邏輯類似下面的返回集合中分頁匹配文檔的XQuery FLOWR搜索檢索字段值進行排序基於字段從marklogic搜索

let $options := 
    <options xmlns="http://marklogic.com/appservices/search"> 
    <transform-results apply="raw"/> 
    <additional-query> 
     {cts:collection-query("http://example.com/myCollectionName")} 
    </additional-query> 
    <sort-order direction="descending" > 
     <field name="myCustomFieldA" /> 
    </sort-order> 
    <debug>true</debug> 
    </options> 

for $searchResults in search:search("someQuery", $options, 1, 10) 
return $searchResults 

我有幾個自定義的字段設置具有包含字段範圍索引的文檔,我想檢索匹配文檔的字段中的值,而不是文檔本身。像下面這樣的東西?

for $searchResults in search:search("someQuery", $options, 1, 10) 
return get-field-values($searchResults, ("myCustomFieldA", "myCustomFieldB")) 

我將如何返回這些字段值?

回答

2

您的示例建議您希望將結果分頁並按特定範圍索引進行排序。

cts:field-values()可以在您的迭代中使用文檔URI作爲傳遞給第4個參數(查詢參數)的文檔查詢的一部分。

但是,你可能會發現cts:value-co-occurences是有用的。

+0

這裏的問題是,'CTS:現場values'似乎拋出一個錯誤如果myCustomFieldA和myCustomFieldB是不同的類型。我認爲要真正實現我想要的輸出,就需要對每個字段的cts:field-values進行一次調用,到那個時候,獲取原始文檔並對其進行轉換可能更容易。 – alastairtree

+0

如果您最終想要的內容都是來自索引的內容(如您的示例),那麼檢索文檔並轉換它可能會帶來更多的開銷。與cts:field-values()的兩個調用相比。另請參閱ehennum與搜索相關的答案:values() - - 其中可能使用cts:xxx-values函數。 –

2

搜索API不支持提取使用XPath的文檔的部分,這可能會接近你想要什麼:

http://docs.marklogic.com/guide/search-dev/query-options#id_37692

如果你想返回實際的文件,你可能會發現搜索:解決-nodes()函數比搜索更加有效:搜索()以將原始:

http://docs.marklogic.com/search:resolve-nodes

最後,如果你的領域都有一系列索引,搜索:值()可以構建TUP基於共同出現在文檔中,這應該是比因爲值從索引檢索的檢索文檔速度更快萊:

http://docs.marklogic.com/search:values

+0

Extract-document-data確實看起來像它可以做我想做的事。我實際上使用一個參數來轉換原始轉換和片段視圖,但當使用搜索來獲取文檔時,resolve-nodes看起來很有用。對我來說似乎很奇怪,我可以按名稱排序基於字段的結果,但不容易在結果集中包含用於此類排序的值。 – alastairtree