【问题标题】:Extract only data (without response element) using MarkLogic search API with REST使用带有 REST 的 MarkLogic 搜索 API 仅提取数据(没有响应元素)
【发布时间】:2020-09-30 02:17:59
【问题描述】:

在对 MarkLogic 进行 REST 端点调用时,是否可以选择仅获取响应中的数据而不获取其他元数据?

我正在尝试使用 Tableau、Qlik、Denodo 等工具建立此类连接

我在 URL 的 POST 正文中使用的选项:http://localhost:8000/v1/search

<search xmlns="http://marklogic.com/appservices/search">
<options>
<extract-document-data selected="all"></extract-document-data>
<transform-results apply="raw" />
</options>
</search>

我得到的结果:

<search:response snippet-format="raw" total="150" start="1" page-length="10" selected="all" xmlns:search="http://marklogic.com/appservices/search">
    <search:result index="1" uri="/doc/21_doc.xml" path="fn:doc(&quot;/doc/21_doc.xml&quot;)" score="0" confidence="0" fitness="0" href="/v1/documents?uri=%2Fdoc%2F21_doc.xml" mimetype="application/xml" format="xml">
        <root>
            <col1>data1</col1>
            <col2>data1</col2>
            <col3>data1</col3>
        </root>
        <search:extracted kind="element">
            <root>
                <col1>data1</col1>
                <col2>data1</col2>
                <col3>data1</col3>
           </root>
        </search:extracted>
    </search:result>
    <search:metrics>
        <search:query-resolution-time>PT0.0005236S</search:query-resolution-time>
        <search:snippet-resolution-time>PT0.0001001S</search:snippet-resolution-time>
        <search:extract-resolution-time>PT0.0003971S</search:extract-resolution-time>
        <search:total-time>PT0.0021503S</search:total-time>
    </search:metrics>
</search:response>

预期:

    <search:extracted kind="element">
        <root>
            <col1>data1</col1>
            <col2>data1</col2>
            <col3>data1</col3>
       </root>
    </search:extracted>

另外,为什么我在提取元素和结果元素中都获取数据?

【问题讨论】:

    标签: rest marklogic


    【解决方案1】:

    sn-ping 和数据提取都提供对内容的访问。使用其中一个,或将它们用于不同的目的。如果您只想获取提取的数据,请使用:

    <transform-results apply="empty-snippet" />
    

    HTH!

    【讨论】:

    • 我在帖子正文中使用了&lt;transform-results apply="raw" /&gt;。这甚至不返回对我有好处的 sn-p 元素。但要求是我也不想要响应和提取元素。
    【解决方案2】:

    如果您想要原始文档,请指定 multipart-mixed 的 Accept 标头,并仅指定类别 URI 参数的内容值。

    见:https://docs.marklogic.com/REST/POST/v1/searchhttps://docs.marklogic.com/guide/rest-dev/bulk#id_65903

    作为替代方案,您可能会发现通过创建 TDE 索引并使用 /v1/rows 端点对光学查询进行分页来向商业智能工具提供行更容易。

    见:https://docs.marklogic.com/guide/rest-dev/search#id_34628https://docs.marklogic.com/REST/POST/v1/rows

    希望对您有所帮助,

    【讨论】:

    • accept-multipart/mixed 确实返回了数据,但也返回了一些标题信息,如下所示。这可以避免吗? --ML_BOUNDARY_2249802654100809912 Content-Type: application/xml Content-Disposition: attachment; filename="/doc/21_doc.xml"; category=content; format=xml Content-Length: 435 2. /rows 要求我创建 TDE 模板,对吗?我宁愿不使用带有 ODBC 连接的视图来向 BI 工具公开数据吗?
    • “标题”信息根据多部分 mime 类型的要求分隔文档。 /v1/rows 端点可以将所有行作为 CSV、行分隔的 JSON 有效负载或每页 JSON 或 XML 有效负载获取。 BI工具可以为你驱动ODBC连接;如果您需要更多控制,/v1/rows 端点提供了一种替代方法。
    • 我不想使用 /v1/rows,因为它需要创建 TDE。这违背了使用 REST over ODBC 的全部目的。如果我使用 REST,我不需要在我的数据库中创建任何额外的文档和索引。如果我错了,请纠正我。其次,当使用 multipart/mixed 时,我无法移除边界。如果您能在这部分提供帮助,那就太好了。
    • 大多数编程语言都有用于解析多部分的公共库。特别是,如果您使用 Java 或 Node.js,MarkLogic Java 和 Node.js 客户端 API 会提供为您完成工作的请求接口。我知道 dotNet 还包含一个多部分解析器库,尽管我对 dotNet 很浅。
    猜你喜欢
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多