Marklogic 对于与附件中的索引字段同名的字段,如何避免范围索引错误?

Marklogic 对于与附件中的索引字段同名的字段,如何避免范围索引错误?,marklogic,marklogic-dhf,Marklogic,Marklogic Dhf,对于我的项目,我必须从各种来源收集和整理数据。 我通过使用流的数据中心框架来实现这一点。 我所有的不同来源都有一个名为date的字段。但是,它们都有不同的形式,例如yyyy-mm-dd、yyyymmdd、dd.mm.yyyy 我通过一个映射步骤将其映射到一个通用格式yyyy-mm-dd。 映射之后,该字段仍然称为date 因为我想能够进行范围搜索,所以我需要一个日期索引。但是,这会导致在摄取数据时出错,因为摄取数据的日期字段尚未映射到正确的格式 我的解决方案是不拒绝临时数据库的无效值。但是,由于

对于我的项目,我必须从各种来源收集和整理数据。 我通过使用流的数据中心框架来实现这一点。 我所有的不同来源都有一个名为date的字段。但是,它们都有不同的形式,例如yyyy-mm-dd、yyyymmdd、dd.mm.yyyy

我通过一个映射步骤将其映射到一个通用格式yyyy-mm-dd。 映射之后,该字段仍然称为date

因为我想能够进行范围搜索,所以我需要一个日期索引。但是,这会导致在摄取数据时出错,因为摄取数据的日期字段尚未映射到正确的格式

我的解决方案是不拒绝临时数据库的无效值。但是,由于旧文档被附加在经过策划的新文档的信封中,而新文档在映射后被移动到最终数据库中,因此我得到了附加文档的范围索引错误

我想拒绝最终数据库中的无效值,但我还想将原始文档作为附件保留在最终文件中

到目前为止,我能看到的唯一解决方案是将最终数据库中的date元素命名为类似iDate的名称,以避免冲突

对我来说,这似乎不是一个干净的解决方案。你有更好的建议吗

我正在使用:

centos 7 Marklogic 10 Marklogic数据中心5.2.3
如果使用路径范围索引,则可以将其仅限于顶级实例中而非附件中的日期元素


有关使用路径范围索引的详细信息,请参阅。

如果使用路径范围索引,可以将其限制为仅包含顶级实例中而不包含在附件中的日期元素


有关使用路径范围索引的详细信息,请参阅。

将路径字段配置为仅以规范化日期为目标,不包括信封中的原始日期元素

在路径字段中,包含和排除的图元约束到由路径标识的子树。例如,如果字段的路径为/A/B/C,则只有节点C中的元素(如A/B/C/D、A/B/C/D/E和/A/B/C/Z)才会包含或排除在字段中

路径字段可以包括一个或多个路径。多条路径被视为路径的并集。因此,它们中的每一个都将标识给定文档中字段实例的根


将路径字段配置为仅以规范化日期为目标,不包括信封中的原始日期元素

在路径字段中,包含和排除的图元约束到由路径标识的子树。例如,如果字段的路径为/A/B/C,则只有节点C中的元素(如A/B/C/D、A/B/C/D/E和/A/B/C/Z)才会包含或排除在字段中

路径字段可以包括一个或多个路径。多条路径被视为路径的并集。因此,它们中的每一个都将标识给定文档中字段实例的根


给标准化日期元素起一个不同的名字似乎是一个非常干净的方法。理想情况下,由名称空间限定的同名元素具有相同的定义和语义。当源代码提供的日期实际上不是xs:dates时,所提供的日期节点实际上只是一个稍微受约束的字符串。当然,它以某种易于翻译的方式描述了一个日期,但它实际上不是一个日期字段,因此它不能作为日期字段进行索引。当您标准化源数据时,您正在创建一个新的数据点,该数据点实际上是一个日期,并且它“应该”采用一个新标识:您建议的新本地名称,或者标准化数据命名空间中的日期

<envelope>
  <original>
    <date>09-09-2020</date>
    <!-- etc -->
  </original>
  <normalized>
    <my:date>2020-09-09</my:date>
  </normalized>
</envelope>

给标准化日期元素起一个不同的名字似乎是一个非常干净的方法。理想情况下,由名称空间限定的同名元素具有相同的定义和语义。当源代码提供的日期实际上不是xs:dates时,所提供的日期节点实际上只是一个稍微受约束的字符串。当然,它以某种易于翻译的方式描述了一个日期,但它实际上不是一个日期字段,因此它不能作为日期字段进行索引。当您标准化源数据时,您正在创建一个新的数据点,该数据点实际上是一个日期,并且它“应该”采用一个新标识:您建议的新本地名称,或者标准化数据命名空间中的日期

<envelope>
  <original>
    <date>09-09-2020</date>
    <!-- etc -->
  </original>
  <normalized>
    <my:date>2020-09-09</my:date>
  </normalized>
</envelope>

正是我想要的。谢谢你的快速回复。然而,我发现Quickstart中有一点误导,即当您单击实体little lightning符号中的范围索引符号时,将创建一个元素范围索引,该索引以所有这些元素为目标。如果您以前使用cts进行查询,在将索引更改为路径范围索引后,您必须使用cts.pathRangeQueryThis是一个有效的注释,您可以向Data Hub开发团队提供此反馈,其中有一个问题:。也就是说,你可能
nt需要考虑一下实体中字段的名称。“日期”字段的含义是什么?是出生日期吗?这是订单日期吗?等等。给出实体名称中的属性,这些属性从商业角度来看有一定的意义。这正是我想要的。谢谢你的快速回复。然而,我发现Quickstart中有一点误导,即当您单击实体little lightning符号中的范围索引符号时,将创建一个元素范围索引,该索引以所有这些元素为目标。如果您以前使用cts进行查询,在将索引更改为路径范围索引后,您必须使用cts.pathRangeQueryThis是一个有效的注释,您可以向Data Hub开发团队提供此反馈,其中有一个问题:。也就是说,您可能需要考虑一下实体中字段的名称。“日期”字段的含义是什么?是出生日期吗?这是订单日期吗?等等。请给出实体名称中的属性,这些属性从业务角度来看具有某种意义。感谢您的回答。但是,我使用的是JSON数据,无法使用名称空间。然后,我摄取的某些数据总是与规范化数据中新定义的字段具有完全相同的名称。谢谢您的回答。但是,我使用的是JSON数据,无法使用名称空间。然后,我摄取的某些数据总是与规范化数据中新定义的字段具有完全相同的名称。