Xquery MarkLogic-扩展搜索,返回特定对象节点

Xquery MarkLogic-扩展搜索,返回特定对象节点,xquery,marklogic,Xquery,Marklogic,我刚刚开始学习MarkLogic和XQuery 我试图创建一个搜索转换来返回文档特定级别的实际JSON 这是一个示例文档 我想返回整个基于JSON的片段,无论搜索结果在较低级别(成绩单、主题、横幅等)的何处 在查询控制台中四处飞溅 search:search('trump')/search:result/search:snippet/@path 成功返回对象的路径,包装在fn:doc中 fn:doc(“/20170120/NBCNightlyNews/1830/nbc”)/array nod

我刚刚开始学习MarkLogic和XQuery

我试图创建一个
搜索转换
来返回文档特定级别的实际JSON

这是一个示例文档

我想返回整个基于JSON的
片段
,无论搜索结果在较低级别(成绩单、主题、横幅等)的何处


在查询控制台中四处飞溅

search:search('trump')/search:result/search:snippet/@path

成功返回对象的
路径
,包装在fn:doc中

fn:doc(“/20170120/NBCNightlyNews/1830/nbc”)/array node(“segments”)/object-node()/transcript/node(“00:00:02”)/text(“message”)

但是,

当我尝试在转换中实现类似的Xpath表达式时

let $root := $content/*
return document {$root/search:result/search:snippet//@path}
并尝试执行它(不管xpath表达式是什么,除了$root本身之外,还有一个不同的失败)返回

<error-response xmlns="http://marklogic.com/xdmp/error">
<status-code>400</status-code>
<status>Bad Request</status>
<message-code>XDMP-CHILDNODEKIND</message-code>
<message>
XDMP-CHILDNODEKIND: $root/search:result/search:snippet/descendant-or-self::node()/@path -- document nodes cannot have attribute node children
</message>
</error-response>

400
错误的请求
XDMP-CHILDNODEKIND
XDMP-CHILDNODEKIND:$root/search:result/search:snippet/genderant或self::node()/@path--文档节点不能有属性节点子节点
如果我可以让转换返回路径,那么我可以继续尝试计算路径,获取适当的JSON部分并返回


有什么想法吗?

看起来你是为了做搜索而写的。如果是,请考虑使用端点——这样您就可以使用内置的功能。p> 我不确定您到底想做什么:是要返回文档“段”部分的片段,还是要返回文档的完整部分,而不管匹配项在哪里

如果是前者,则可以通过指定首选的匹配源

如果是后者,您可以编写它,它将让您完全控制返回的内容


无论是使用RESTAPI还是调用搜索API,这些选项都是可用的(我认为是相同的)

嗨,戴夫,谢谢你的回复。我以前使用的是
/v1/search
,但最终需要进一步定制搜索(我们正在使用一个内容分析服务器,该服务器将提供搜索中需要包含的权重,这就是我开始扩展的原因。我认为我需要研究一下转换,然后返回到自定义搜索逻辑。我将在阅读建议的文档后返回。根据您的最终目标,您可能会因此,想看看extract document data(提取文档数据)选项,它使您能够提取匹配文档的选定部分。正如Dave和Kim所提示的,您可以在资源服务扩展中使用搜索API,这将为您提供代码片段和基于XPath的提取。我已经更新了我的问题,试图通过转换实现这一点,我要ng现在也开始研究提取文档数据选项。感谢您提供的所有指导。看起来提取比转换更适用于我的任务。我想,谢谢您的提示@kcoleman