【问题标题】:MarkLogic 8 Java API - add element range index programaticallyMarkLogic 8 Java API - 以编程方式添加元素范围索引
【发布时间】:2015-02-15 12:12:42
【问题描述】:

我正在使用 ML Java API 中的 RawQueryByExampleDefinition 按示例搜索查询。在我们升级到版本 8 之前,传入如下所示的动态选项(关注元素名称):

<options xmlns="http://marklogic.com/appservices/search">
  <sort-order collation="http://marklogic.com/collation/en/S1/EO/CU/MO" type="xs:string" direction="ascending">
    <element ns="" name="dynamicElement"/>
  </sort-order>
</options>

以上内容适用于未配置任何元素范围索引的 ML 7。但是,对于 ML 8,这给了我一个错误,在深入研究原因后,似乎现在需要创建元素范围索引,否则 ML Java API 将引发错误。

我的问题是从我的 API 摄取到 ML 中的元素并不是真正预先确定的或无模式的,这意味着它们(客户端)可以插入任何 JSON 格式。有没有办法动态或以编程方式创建元素范围索引,以便系统首先检查传入的“无模式”数据并根据传入的 JSON 结构或元素动态添加元素范围索引?

【问题讨论】:

    标签: java marklogic


    【解决方案1】:

    这对我来说听起来像是一个错误修复。对于任何大规模的查询排序选项,您应该始终拥有适当的范围索引。如果规模不重要,请使用 Java 进行排序。

    您可以使用管理 API:https://docs.marklogic.com/admin:database-add-range-element-index 和相关函数创建范围索引。您可以创建任意数量的范围索引。

    公开一个允许用户按需创建范围索引的 REST API 可能会起作用。但是,在您的情况下,我会先进行一些仔细的分析,因为这可能会导致磁盘和内存利用率的无限增长。您可能还必须考虑名称相同但语法含义不同的元素之间可能存在的冲突,调用不同的排序规则等。这就是 XML 命名空间的用途:ns1:titlens2:title。但是 JSON 没有命名空间。

    【讨论】:

      【解决方案2】:

      我认为值得指出的是,您还可以创建一个基于字段的字段范围索引,该字段可以使用 XPath 来匹配任意深度的元素名称和 json 属性的灵活列表。这样,您的应用程序可以引用该字段,而您服务器上的字段配置可以代表您想要包含的最新元素列表。

      那么你的选择会变成:

      <options xmlns="http://marklogic.com/appservices/search">
        <sort-order collation="http://marklogic.com/collation/en/S1/EO/CU/MO"
          type="xs:string" direction="ascending">
          <field name="dynamicField"/>
        </sort-order>
      </options>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多