我有一个用例,其中有父文档和父文档的一些子文档。当我搜索时我想总是返回父文档。让我们说如果搜索结果中有两个具有相同父级的子文档,则需要将结果分组到一个搜索结果,其中包含从子文档中传输的片段。此外,我想应用分页,但分页应该在转换后的搜索结果上。这可能吗?父和子之间的关系是子文档中的属性<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>
答案 0 :(得分:3)
如果要搜索子文档并仅返回每个父文档的结果/片段,那么理想的解决方案可能是在摄取过程中将父文档和子文档合并为一个文档。通过这种方式建模数据,您可以编写查询来搜索子文档数据,然后您可以在代码段生成期间转换父文档结果。
将这些数据保存在单独文档中的任何解决方案都需要&#34;加入&#34;运行时的数据,每页选择更多结果,以便于父文档的重复数据删除。与非正规化的&#34;相比,每个都会产生性能损失。单个文档,它可能会使实现更复杂。
答案 1 :(得分:2)
对上述所有内容进行一些实际操作(索引或集合),但所有这些选项都使用范围索引或词典。我建议的所有这些都不需要重复数据删除(因为我们会确保通过查询以某种方式隔离父文档)
如果您对上述任何内容感兴趣,请发布一些示例文档和uris,我们可以从那里开始改进答案以更具体地满足您的需求