繁体   English   中英

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

[英]MarkLogic - Extending the Search, return specific object node

我很开始使用MarkLogic和XQuery。

我正在尝试创建一个Search Transform来返回来自文档特定级别实际JSON

这是一个示例文档。

在此输入图像描述

无论搜索结果位于较低级别(成绩单,主题,横幅等),我都希望返回整个基于JSON的segment


在查询控制台中四处乱窜......

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

成功返回包含在fn:doc中的对象的path

fn:doc(“/ 20170120 / NBCNightlyNews / 1830 / nbc”)/ array-node(“segments”)/ object-node() 1 / 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>

如果我可以让变换返回路径,那么我可以继续尝试评估路径,获取适当的JSON部分并返回。

有什么想法吗?

您似乎编写了一个REST API服务扩展来进行搜索。 如果是这样,请考虑使用/ v1 / search端点 - 这样您就可以使用内置功能。

我不确定你要做什么:你想从文档的“段”部分返回片段,还是想要返回文档的完整部分,无论匹配在哪里?

如果是前者,你可以自定义snippeting通过指定比赛的最佳来源。

如果是后者,您可以编写一个搜索转换 ,让您完全控制返回的内容。

无论是使用REST API还是调用Search API,这些选项都可用(我认为都是相同的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM