如何解决根据搜索语法构建cts查询
我有一个用例,其中我必须编写自定义 REST 扩展,并且必须根据用户提供的文本字符串构建 cts:query
。有没有一种方法可以利用
- 将
cts:query
传递给search:search
? - 或者我如何利用搜索语法的力量,如
search:search
构建cts:query
的方式?
------------ 更新,提供更多上下文---------------
我的数据库中有两种不同的实体类型。当用户查询时,我得到了两种实体类型的结果,并将结果组合在一起。每种实体类型的属性都有不同的加权方案。
所以我最终编写了一个自定义 REST 扩展,其中我为每个实体类型构建了 cts:query
,然后发出多个 cts:search
,然后组合结果.. 这有效,但当用户使用搜索语法发送时失败。
作为解决方法(也许不是)。我有一个 API 网关,当用户发出调用时,在 API 网关中,我使用开箱即用的搜索 REST API 发出多个调用,每个实体类型都有搜索选项和然后在 GATEWAY 中,我将它们组合起来..
现在我必须在 marklogic 中维护逻辑,在 gateway 中维护一个逻辑......这很好......我想看看我是否可以在 Marklogic 中拥有一切
解决方法
考虑一下 cts:parse()
,它是 search:parse() 的现代、更快、更灵活和更健壮的替代方案,用于在 XQuery 和 SJS 中生成 cts:query:
https://docs.marklogic.com/cts:parse
如果您需要在客户端构建查询结构,一种可能性是在客户端使用 XML 或 JSON DOM API 构建 cts:query 的序列化,并使用 cts:query() 构造函数来解析序列化cts:在enode上查询。
您可以使用以下命令查看 cts:query 的 XML 序列化:
xdmp:quote(document{...YOUR QUERY...}/*)
和 JSON 序列化:
xdmp:to-json-string(...YOUR QUERY...)
希望有所帮助,
,接收和处理 qtext 相当简单:只需使用 search:parse
。它返回一个 cts:query,它可以与其他 cts 查询合并,并传递到 search:resolve
、光学查询(您将 cts 查询作为参数提供给 op:where
)或 {{ 1}} 老式的方式。
处理结构化查询更加困难。不幸的是,没有公开的官方 API 可以将其转换为 cts 查询..
HTH!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。