2016-03-18 101 views
4

我有一個用例,其中父文檔和父文檔有一些子文檔。當我搜索時,我總想返回父文檔。讓我們說一下,如果搜索結果擊中了具有相同父項的兩個子項文檔,則結果需要分組到一個搜索結果,其中子項文檔帶有片段。我也想應用分頁,但分頁應該在轉換後的搜索結果上。這可能嗎?父母和孩子之間的關係是對孩子的文檔屬性<parent-document-location>Marklogic 8搜索結果與搜索片段的分組

父文檔屬性

<?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> 

子文件ument 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> 

回答

3

如果要在子文件進行搜索,只返回一個結果/片斷爲每個父文件,那麼可能是理想的解決方案是在父和子文檔合併成一個單一的文件攝入。通過這種方式建模數據,您可以編寫查詢來搜索子文檔數據,然後在代碼生成期間轉換父文檔結果。

任何將這些數據保存在單獨文檔中的解決方案都需要在運行時「加入」數據,並選擇每頁更多結果以促進父文檔的重複數據刪除。與「非規範化」單個文檔相比,這些文檔中的每一個都會導致性能損失,並且可能會使實現更復雜。

+0

謝謝,不幸的是在我的情況下,我不能合併到一個單一的文件,而且我的一些文件是二進制的。 – Ravi

2
  • 如果parent-document-location是父 文檔中存在的id,則使用範圍索引並創建一個shotgun查詢。
  • 如果父文檔定位是一個URI,然後添加一個索引,並在使用 CTS值和管道中的URI到CTS:文檔查詢
  • 否則,另一種非侵入性的方式與一些與 相關的魔法使用集合上的文檔和一些神奇的組合:cts:collections通過集合傳入cts:collection-query。

上述所有內容都可以使用它來啓動和運行(索引或集合),但所有這些選項都是從範圍索引或詞典運行的。我建議的所有這些都不需要重複數據刪除(因爲我們會確保通過查詢以某種方式隔離父文檔)

如果上述任何內容對您有用,請發佈一些示例文檔和uris,我們可以從那裏工作,以提煉一個答案,更具體地滿足您的需求

+0

所有子文檔和主文檔都有一個屬性'',它有元素範圍索引,並且主文檔在它自己的集合中,子文檔在它們自己的集合中。什麼是霰彈槍查詢? ?我將附加到一些示例文件的主要問題 – Ravi

+0

因此,子項中的parent-document-location元素具有在父文檔中找到的父文檔id的id? –

+0

是啊,所有的文件都有屬性''在裏面,它們對於父母和小孩的文件都是一樣的,但是母文件在不同的集合中 – Ravi