我有一个包含XML文档的MarkLogic数据库,以及每个文档的相关元数据(属性)。我想在我的应用程序中显示搜索结果时检索并显示每个文档属性的信息。如果有人能说明如何做到这一点,那就太棒了。
谢谢!
答案 0 :(得分:1)
如果您使用的是https://docs.marklogic.com/search:search或https://docs.marklogic.com/search:resolve,则可以提供自己的转换功能,以便在每个结果元素中包含您喜欢的内容。
在搜索选项中,指定一个功能:
<transform-results apply="snippet" ns="my-namespace" at="/my-library.xqy"/>
指定的函数名必须存在于指定的名称空间和库中,并且必须具有正确的签名。示例代码:
declare function myns:snippet(
$doc as node(),
$query as schema-element(cts:query),
$options as element(search:transform-results)?)
as element(search:snippet)
{
(: Do whatever you like with each match. :)
element search:snippet {
xdmp:document-properties(xdmp:node-uri($doc)),
$doc }
};
搜索API代码将在每次匹配时调用您的代码段功能,并将输出添加到搜索结果中。功能签名很重要:不要更改它。如果要将任何选项传递给代码段功能,可以使用$options
参数。它包含search:transform-results
元素的副本,该元素可以包含您喜欢的任何XML。
有关搜索选项的更多信息,请阅读https://docs.marklogic.com/guide/search-dev/query-options#id_58295
答案 1 :(得分:1)
迈克尔·布莱克尔的一个好注意事项 - 如果你正在使用REST API或Java API,你也可以通过在搜索中安装和应用XQuery或XSLT转换来查找文档属性服务器上的结果:
http://docs.marklogic.com/guide/rest-dev/search#id_94556
或者,如果您不想在服务器上安装任何内容,只需使用category参数指定要为单个文档请求恢复的内容:
http://docs.marklogic.com/guide/rest-dev/documents#id_49889 http://docs.marklogic.com/javadoc/client/com/marklogic/client/document/DocumentManager.html#readMetadata%28java.lang.String,%20T%29
然而,转换方法会更有效率。
希望有帮助,
Erik Hennum答案 2 :(得分:1)
在使用已经提到的结果转换之后,您还可以在搜索中使用extract-metadata
关键字:搜索和REST api查询选项。你可以在这里找到文件:
http://docs.marklogic.com/search:search#opt-extract-metadata
请注意,这些只会返回关联的值以及字段或元素的名称。
有时可能只是有点过于限制,例如,如果您想要返回整个html元元素,那么您还需要所有属性来使用它。在这种情况下,result-decorator
就是您的答案。你可以在这里找到一个很好的例子:
http://docs.marklogic.com/guide/search-dev/query-options#id_35434
HTH!