3

我有以下xml结构

 <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 Server 中为patent-assignor&创建一个数据库字段,patent-assignee 以便我可以使用cts:field-word-query. 但我想搜索专利转让人和专利受让人的姓名(都包含相同的元素“ name”)。谁能告诉我如何将专利转让人的字段映射到专利转让人的姓名,将专利受让人的字段映射到专利受让人的姓名,以便我可以cts:field-word-query在专利转让人和专利受让人的姓名上使用。我想要一个精确的匹配。

4

2 回答 2

2

这听起来不像是字段索引的用例。只需在元素''上放置一个索引name,两种情况都将在同一个索引中进行索引。为了进行区分,请为相应的父元素包装 aword-queryvalue-query用 an 。element-query

于 2012-05-07T09:04:34.667 回答
1

我认为上面关于确保您了解可用选项的评论都很重要。如果我正确理解您的问题,MarkLogic 可能只使用“通用索引”来回答您的搜索。

因为assignor 和assignee 都使用名为“ name”的元素,所以查询两者的精确匹配非常简单(精确匹配通常意味着a value-querynot a 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."))
))

字段在隔离特定元素方面可能非常强大,尤其是当需要遵循复杂的“包含”和“排除”逻辑时。我认为您很可能只需使用“通用索引”在查询时进行过滤就可以使事情变得更加灵活。

于 2012-05-07T19:19:47.167 回答