2012-05-07 46 views
3

我有以下XML結構如何在Marklogic Server中創建數據庫字段?

<patent-assignors> 
     <patent-assignor> 
      <name>VOLPENHEIN, ROBERT A.</name> 
      <execution-date> 
     <date>19841204</date> 
      </execution-date> 
     </patent-assignor> 
</patent-assignors> 


    <patent-assignees> 
     <patent-assignee> 
      <name>PROCTER &amp; GAMBLE COMPANY, THE</name> 
      <address-2>A CORP. OF OHIO</address-2> 
      <city>CINCINNATI</city> 
      <state>OHIO</state> 
     </patent-assignee> 
    </patent-assignees> 

我想創建Marklogic服務器數據庫字段patent-assignor & patent-assignee ,這樣我可以用cts:field-word-query。但我想搜索專利轉讓人和專利受讓人的名稱(都包含相同的元素「name」)。任何人都可以告訴我如何將專利轉讓人的字段映射到專利轉讓人名稱和專利受讓人的專利受讓人名稱,以便我可以在專利轉讓人和專利受讓人的名稱上使用cts:field-word-query。我想要一個精確匹配。

回答

2

這聽起來並不像字段索引的用例。只需在元素'name'上放置索引,並且這兩種情況都將在同一索引中編入索引。要作出區分,請將word-queryvalue-queryelement-query作爲適當的父元素。

+0

我不是在說這裏的索引。我想創建一個不是索引的字段! –

+0

@ puneet-pant字段只是另一種類型的索引。 – grtjn

+0

@ puneet-pant您可能對MarkLogic管理指南的以下部分感興趣,它解釋了字段的工作方式以及您擁有的選項:http:// docs.marklogic.com/5.0doc/docapp.xqy#display.xqy?fname=http://pubs/5.0doc/xml/admin/fields.xml&query=Fields – grtjn

1

我認爲上述關於確保您理解可用選項的意見都是需要考慮的重要因素。如果我正確理解你的問題,MarkLogic可能只使用「通用索引」來回答你的搜索。

因爲轉讓人和受讓人都使用命名的元素「name」,無論是精確匹配查詢是實際上可以很簡單(精確匹配通常意味着value-query不是word-query

cts:element-value-query(xs:QName("name"), "VOLPENHEIN, ROBERT A.") 

但是,如果有除了轉讓人和受讓人之外,您的數據中有更多的「name」元素,並且您需要將點擊範圍縮小爲僅來自這些不是其他的「name」字段,您可以使用element-queries來限制搜索確保您有element-word-positionselement-value-positions設置你的數據庫設置爲true)

cts:or-query((

    cts:element-query(xs:QName("patent-assignor"), 
         cts:element-value-query(
          xs:QName("name"), 
          "VOLPENHEIN, ROBERT A.")), 

    cts:element-query(xs:QName("patent-assignee"), 
         cts:element-value-query(
          xs:QName("name"), 
          "VOLPENHEIN, ROBERT A.")) 
)) 

領域是非常強大至於分離特定的元素,尤其是當有複雜的「包括」和「排除」的邏輯可循。我認爲只需使用「通用索引」在查詢時進行過濾,就可以讓事情更加靈活。

+0

如果您將多個QName傳遞給單個元素查詢,上述查詢可能會縮短。該函數接受一個序列作爲第一個參數。不時可以非常有用.. – grtjn

+0

謝謝@derickson –

+0

@derickson感謝您的詳細解釋。如果我想比較專利轉讓人和專利受讓人的名稱,並希望僅返回那些專利轉讓人和專利受讓人的名稱不相同的結果,我還有一個問題。那麼我應該如何編寫查詢? –

相關問題