【问题标题】:Build cts query based on search grammar基于搜索语法构建cts查询
【发布时间】:2021-02-21 21:16:38
【问题描述】:

我有一个用例,我必须编写自定义 REST 扩展,并且我必须根据用户提供的文本字符串构建 cts:query。有什么方法可以利用吗

  • cts:query 传递给search:search ?
  • 或者我如何利用搜索语法的力量,就像search:search 构建cts:query 一样?

自定义搜索约束不适用于我的情况。

------------ 更新,提供更多上下文---------------

我的数据库中有两种不同的实体类型。当用户查询时,我已经从两种实体类型中获得了结果,并将结果组合在一起。每种实体类型的属性都有不同的加权方案。
所以我最终编写了一个自定义 REST 扩展,在其中我为每种实体类型构建了 cts:query,然后发出多个 cts:search,然后合并结果。这有效,但当用户使用搜索语法发送时失败。
作为解决方法(也许不是)。我有一个 API 网关,当用户发出调用时,在 API 网关中我使用开箱即用的搜索 REST API 发出多个调用,每个实体类型的搜索选项和然后在 GATEWAY 中,我将它们结合起来..
现在我必须在 marklogic 中维护一个逻辑,在 gateway 中维护一个.. 这很好.. 我想看看我是否可以在 Marklogic 中拥有一切

【问题讨论】:

标签: marklogic marklogic-9


【解决方案1】:

考虑 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...)

希望对您有所帮助,

【讨论】:

    【解决方案2】:

    接收和处理 qtext 相当简单:只需使用 search:parse。它返回一个 cts:query,它可以与其他 cts 查询合并,并传递给 search:resolve、一个光学查询(您将 cts 查询作为参数提供给 op:where)或 cts:search 旧的-老式的方式。

    处理结构化查询更加困难。不幸的是,没有公开的官方 api 可以将其转换为 cts 查询..

    HTH!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      相关资源
      最近更新 更多