我使用ML9 Java API将搜索选项文件上传到数据库,其名称可以在我的搜索调用中稍后使用。我现在想编写一个xquery变换来突出显示响应中一组元素中的查询匹配。标准片段对我来说不起作用,因为它们只会带回有匹配的字段,因为它们可能不会带回完整的字段值,而只会带回匹配的直接上下文。
所以我想在自定义转换中使用cts:highlight函数,并希望将已上传到数据库中的选项的名称传递给它。我的问题是如何使用传入transform方法的名称最好地从DB中获取options元素。我想用它来构造cts:我可以传递给cts的查询:突出显示调用,如:
let $query := cts:query(search:parse($query-string, $options))
let $result := cts:highlight($doc, $query, <markup>{$cts:text}
</markup>)
我以为我可以传递查询字符串和预加载选项的名称,并使用这些来构造cts:query,但不知道如何从名称中获取选项。< / p>
答案 0 :(得分:2)
我找到了避免阅读选项的方法。将选项'return-query'设置为true会将search:query节点添加到search:response中,该响应将作为文档节点传递给transform方法。然后我可以直接在转换方法中使用它来在cts中使用:突出显示为: let $ query:= cts:query($ response / search:response / search:query / * [1])
答案 1 :(得分:0)
选项存储在与REST实例关联的模块数据库中。理论上你可以将它们挖出来,尽管这将依赖于实现细节(URI)。
你可能会看到Sam提到的提取文档数据的组合,加上搜索结果转换,而不是通过我猜测的读取转换进行自己搜索的较重方法。 / p>
另一个替代方案可能是您通过转换结果引入选项的自定义代码段。请参阅http://docs.marklogic.com/guide/search-dev/query-options#id_58295。