4

我有一个用例,其中有一个父文档和一些父文档的子文档。当我搜索时,我想始终返回父文档。让我们说,如果搜索结果命中 2 个具有相同父级的子文档,则需要将结果分组到一个搜索结果中,并从子文档中继承片段。我也想应用分页,但分页应该在转换后的搜索结果上。这可能吗?父子关系是<parent-document-location>子文档的属性

父文档属性

<?xml version="1.0" encoding="UTF-8"?>
<prop:properties xmlns:prop="http://marklogic.com/xdmp/property">
  <id xmlns="http://ir.abbivenet.com/content-repo/metadata">1e900d1a7210350c0b68973fb0d6dc96f83e161a</id>
  <cpf:processing-status xmlns:cpf="http://marklogic.com/cpf">done</cpf:processing-status>
  <cpf:property-hash xmlns:cpf="http://marklogic.com/cpf">34d0a49cf8835387f6bd213a31732ad4</cpf:property-hash>
  <cpf:last-updated xmlns:cpf="http://marklogic.com/cpf">2016-03-15T21:18:20.521372Z</cpf:last-updated>
  <cpf:state xmlns:cpf="http://marklogic.com/cpf">http://marklogic.com/states/done</cpf:state>
  <cpf:self xmlns:cpf="http://marklogic.com/cpf">/documents/BioEln/1e900d1a7210350c0b68973fb0d6dc96f83e161a.xml</cpf:self>
  <prop:last-modified>2016-03-15T21:50:38Z</prop:last-modified>
</prop:properties>

子文件 1

<?xml  version="1.0" encoding="UTF-8"?>
<prop:properties xmlns:prop="http://marklogic.com/xdmp/property">
<document-parent-location xmlns="http://ir.abbivenet.com/content-repo/metadata">/documents/BioEln/1e900d1a7210350c0b68973fb0d6dc96f83e161a.xml</document-parent-location>
<context xmlns="http://ir.abbivenet.com/content-repo/metadata">BioEln</context>
<id xmlns="http://ir.abbivenet.com/content-repo/metadata">1e900d1a7210350c0b68973fb0d6dc96f83e161a</id>
<prop:last-modified>2016-03-15T21:50:34Z</prop:last-modified>
</prop:properties>

子文档 2

<?xml  version="1.0" encoding="UTF-8"?>
<prop:properties xmlns:prop="http://marklogic.com/xdmp/property">
<document-parent-location xmlns="http://ir.abbivenet.com/content-repo/metadata">/documents/BioEln/1e900d1a7210350c0b68973fb0d6dc96f83e161a.xml</document-parent-location>
<context xmlns="http://ir.abbivenet.com/content-repo/metadata">BioEln</context>
<id xmlns="http://ir.abbivenet.com/content-repo/metadata">1e900d1a7210350c0b68973fb0d6dc96f83e161a</id>
<prop:last-modified>2016-03-15T21:50:34Z</prop:last-modified>
</prop:properties>
4

2 回答 2

3

如果您想在子文档中搜索并且只为每个父文档返回一个结果/片段,那么理想的解决方案可能是在摄取期间将父文档和子文档合并到一个文档中。以这种方式对数据进行建模,您可以编写查询来搜索子文档数据,然后可以在片段生成期间转换父文档结果。

将这些数据保存在单独文档中的任何解决方案都需要在运行时“加入”数据并在每页选择更多结果以促进父文档的重复数据删除。与“非规范化”的单个文档相比,其中每一个都会导致性能损失,并且可能会使实现更加复杂。

于 2016-03-18T16:31:00.310 回答
2
  • 如果 parent-document-location 是父文档中存在的 id,则使用范围索引并创建 Shotgun 查询。
  • 如果 parent-document-location 是 uri,则添加一个索引并在其上使用 cts-values 并将 uris 通过管道传输到 cts:document-query
  • 否则,另一种非侵入式方法是使用与在文档组上使用集合相关的一些魔法,以及通过管道传输到 cts:collection-query 的 cts:collections 的一些魔法组合。

对上述所有内容进行一些肌肉工作以使其启动并运行(索引或集合),但所有这些选项都脱离了范围索引或词典。我建议的所有这些都不需要重复数据删除(因为我们会确保通过查询以某种方式隔离父文档)

如果您对以上任何内容感兴趣,请发布一些示例文档和 uri,我们可以从那里改进答案,以更具体地满足您的需求

于 2016-03-18T17:51:13.430 回答