如何按名称使用MarkLogic搜索选项

时间:2017-06-12 17:38:47

标签: search marklogic options

我使用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>

2 个答案:

答案 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