考虑以下xml:
<Record>
<Author>
<FirstName>David</FirstName>
<LastName>Raj</LastName>
</Author>
<Author>
<FirstName>Sim</FirstName>
<LastName>Son</LastName>
</Author>
<Editor>
<FirstName>Sandy</FirstName>
<LastName>John<LastName>
</Editor>
</Record>
目前,我使用element-query
来获取<Author>
的值。
<constraint name="Author">
<element-query ns="" name="Author" />
{$OPTIONS}
</constraint>
我不想搜索或获取<LastName>
元素的值,但仅需要Author元素的<FirstName>
值。是否可以为此创建嵌套约束?
如果可能,任何人都可以详细说明吗?
感谢。
答案 0 :(得分:3)
索菲:
您在查询中提供所包含元素的条件,而不是在约束中。
在这种情况下,您将创建两个约束:ContentOwnerType上的element-query
约束和Description上的值约束。然后,在查询中,ContentOwnerType的element-constraint-query
应包含描述中的value-constraint-query
。
以下是element-constraint-query
的文档:
http://docs.marklogic.com/guide/search-dev/structured-query#id_64263
作为替代方案,您可以定义包含ContentOwnerType的字段并排除代码:
答案 1 :(得分:0)
如果我们只需要显示FirstName
我们可以创建约束作者参考
FirstName(为此我们需要在FirstName上创建索引)
<search:constraint name="Author">
<search:range collation="http://marklogic.com/collation" type="xs:string" facet="true">
<search:facet-option>ascending</search:facet-option>
<search:element ns="" name="FirstName"/>
</search:range>
</search:constraint>
或者
我们可以拥有Author / FirstName的路径索引,以确保FirstName仅在Author下。
<search:constraint name="Author">
<search:range collation="http://marklogic.com/collation" type="xs:string" facet="true">
<search:facet-option>ascending</search:facet-option>
<search:path-index>*:Author/*:FirstName</search:path-index>
</search:range>
</search:constraint>
希望这会有所帮助:)