我有以下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 & 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
。我想要一个完全匹配的。
发布于 2012-05-07 09:04:35
这听起来并不像一个字段索引的用例。只需在元素'name
‘上建立索引,两种情况都将在同一索引中进行索引。要进行区分,请使用适当父元素的element-query
包装word-query
或value-query
。
发布于 2012-05-07 19:19:47
我认为上面关于确保你理解可用选项的评论都是值得考虑的。如果我没理解错你的问题,MarkLogic可能只用“通用索引”就能回答你的搜索。
因为分配者和受让者都使用名为"name
“的元素,所以查询两者的精确匹配实际上非常简单(精确匹配通常意味着使用value-query
而不是word-query
)
cts:element-value-query(xs:QName("name"), "VOLPENHEIN, ROBERT A.")
但是,如果您的数据中存在除分配者和受让人之外的更多"name
“元素,并且您需要将命中范围缩小到仅来自这些字段,而不是其他"name
”字段,则可以使用element-queries
来限制搜索(要使其具有良好的伸缩性,请确保数据库中的element-word-positions
和element-value-positions
设置为真)。
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."))
))
字段在隔离特定元素方面可能非常强大,特别是当有复杂的“包含”和“排除”逻辑需要遵循时。我认为,只需使用“通用索引”在查询时进行过滤,就很可能使事情变得更加灵活。
https://stackoverflow.com/questions/10479058
复制相似问题