Marklogic 8使用搜索片段对搜索结果进行分组

Marklogic 8使用搜索片段对搜索结果进行分组,marklogic,marklogic-8,Marklogic,Marklogic 8,我有一个用例,其中有一个父文档和一些子文档到父文档。搜索时,我希望始终返回父文档。假设一个搜索结果命中了两个父文档相同的子文档,那么需要将结果分组到一个搜索结果中,其中包含子文档中的片段。我还想应用分页,但分页应该在转换的搜索结果上。这可能吗?父文档和子文档之间的关系是子文档上的属性 父文档属性 1e900d1a7210350c0b68973fb0d6dc96f83e161a 完成 34d0a49cf8835387f6bd213a31732ad4 2016-03-15T21:18:20.521

我有一个用例,其中有一个父文档和一些子文档到父文档。搜索时,我希望始终返回父文档。假设一个搜索结果命中了两个父文档相同的子文档,那么需要将结果分组到一个搜索结果中,其中包含子文档中的片段。我还想应用分页,但分页应该在转换的搜索结果上。这可能吗?父文档和子文档之间的关系是子文档上的属性

父文档属性


1e900d1a7210350c0b68973fb0d6dc96f83e161a
完成
34d0a49cf8835387f6bd213a31732ad4
2016-03-15T21:18:20.521372Z
http://marklogic.com/states/done
/文件/BIOLN/1e900d1a7210350c0b68973fb0d6dc96f83e161a.xml
2016-03-15T21:50:38Z
子文档1


/文件/BIOLN/1e900d1a7210350c0b68973fb0d6dc96f83e161a.xml
生物素
1e900d1a7210350c0b68973fb0d6dc96f83e161a
2016-03-15T21:50:34Z
子文档2


/文件/BIOLN/1e900d1a7210350c0b68973fb0d6dc96f83e161a.xml
生物素
1e900d1a7210350c0b68973fb0d6dc96f83e161a
2016-03-15T21:50:34Z

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

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

  • 如果父文档位置是父文档中存在的id 文档,然后使用范围索引并创建散弹枪查询
  • 如果父文档位置是uri,则添加索引并使用 cts值,并将URI导入cts:document查询
  • 否则,另一种非侵入性的方式是使用与 使用文档组上的集合和一些魔术 连接到cts:collection查询的cts:collection的组合
为了让它运行起来(索引或集合),需要在上面做一些工作,但所有这些选项都超出了范围索引或词典。我建议所有这些都不需要重复数据消除(因为我们将确保通过查询以某种方式隔离父文档)


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

谢谢,不幸的是,在我的情况下,我不能合并成一个文档,而且我的一些文档是二进制的。所有子文档和主文档都有一个属性
,它有元素范围索引,并且主文档在它自己的集合中,子文档在它们自己的集合中。。。什么是散弹枪查询??我将在主要问题后附上一些样本文件,子文档中的父文档位置元素具有在父文档中找到的父文档id的id?是的,所有文档中都有属性
,并且它们对于父文档和子文档都是相同的,但父文档位于不同的集合中问题在于使用喷枪查询方法如何维护分数和分页以及代码片段?这就是我所做的,但我希望分数也能被考虑在内
let$vals:=cts:values((cts:element-reference(xs:QName('meta:id')),(),('properties'),$query-original)let$results:=cts:search(fn:doc(),cts:和query((cts:collection-query-query)(("http://ir.abbvie.com/content-repo/type/master),cts:文档片段查询(cts:元素范围查询(xs:QName('meta:id'),“=”,$vals‘‘‘‘‘‘))[1到10]返回$results
<?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>
<?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>
<?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>