2017-06-12 54 views
1

我正在使用ML9 Java API將搜索選項文件上載到數據庫,並使用稍後在我的搜索調用中使用的名稱。我現在想編寫一個xquery轉換來突出顯示響應中一組元素中的查詢匹配。標準片段對我來說不起作用,因爲它們只會帶回匹配的字段,並且因爲它們可能不會帶回完整的字段值,而僅帶回匹配的直接上下文。如何通過名稱使用MarkLogic搜索選項

所以我想在自定義轉換中使用cts:highlight函數,並想傳遞給我已上傳到數據庫的選項的名稱。我的問題是我怎樣才能最好地從數據庫中獲取選項元素,使用傳遞給transform方法的名稱。我想用這個來構建CTS:查詢我可以在傳遞給CTS:亮點通話中:

let $query := cts:query(search:parse($query-string, $options)) 
let $result := cts:highlight($doc, $query, <markup>{$cts:text} 
</markup>) 

我想我可以在查詢字符串傳遞和預名稱加載選項並使用它們來構建cts:query,但不知道如何從名稱中獲取選項。

+0

你有沒有看過extract-document-data呢?這可能是更少的工作和代碼來爲你維護。 http://docs.marklogic.com/guide/java/searches#id_90087 –

+0

我有,但是如何在提取的字段中突出顯示搜索匹配? –

+0

我似乎無法找到如何寫一個xquery變換的單個示例。示例代碼也僅顯示如何執行XSLT轉換。 –

回答

0

選項存儲在與您的REST實例關聯的模塊數據庫中。理論上你可以將它們挖掘出來,儘管這將依賴於實現細節(URI)。

您可能會像Sam提到的那樣查看extract-document-data的組合,再加上搜索結果轉換,而不是通過我自己猜測的讀取轉換進行自己的搜索的更重的方法。

另一種替代方案可能是您通過變換結果拉入選項的自定義片段。見http://docs.marklogic.com/guide/search-dev/query-options#id_58295

+0

我想要做的是結合了extract-document-data和snippettng的搜索結果轉換。片段只會將帶有匹配的字段和提取不會突出顯示的字段帶回。我不確定如何在不使用cts的情況下如何執行我想要的操作:使用cts:query和選項來突出顯示匹配的文檔,以獲取結果。 –

+0

另外,我收到了您提到的鏈接中找不到的網址。 –

+0

以下是正確的鏈接:http://docs.marklogic.com/guide/search-dev/query-options#id_58295。自定義snippeter可能比提取查詢和轉換文檔更有效。 – ehennum

2

我找到了避免閱讀選項的方法。將選項'return-query'設置爲true會將search:query節點添加到作爲文檔節點傳遞給transform方法的search:response。然後,我可以直接在變換方法中使用cts:highlight作爲: let $ query:= cts:query($ response/search:response/search:query/* [1])

相關問題