我正在使用cts:element-value-search来根据参数搜索文档。虽然查询工作正常但我希望它只搜索直接子元素中的元素。
对于Ex。我的文档树看起来像这样
document1.xml
<Person>
<FirstName>Johnson</FirstName>
<LastName>W</LastName>
<EmailAddress>john@abc.com</EmailAddress>
<Neighbour>
<FirstName>Mathew</FirstName>
<LastName>Long</LastName>
</Neighbour>
</Person>
document2.xml
<Person>
<FirstName>Mathew</FirstName>
<LastName>W</LastName>
<EmailAddress>john@abc.com</EmailAddress>
<Neighbour>
<FirstName>Anderson</FirstName>
<LastName>Long</LastName>
</Neighbour>
</Person>
我的查询是
cts:search(
/Person,
cts:and-query((
cts:element-value-query(xs:QName("FirstName"), concat('*', "son", '*'),
("wildcarded", "case-insensitive", "whitespace-sensitive", "punctuation-sensitive"))
)),
()
)
这将返回两个文档,因为它与第一个文档匹配<FirstName>Johnson</FirstName>
和第二个匹配的文件
<FirstName>Anderson</FirstName>
位于较低级别。
我不想要第二个结果,并希望查询仅在1级搜索。
感谢任何帮助。
答案 0 :(得分:1)
您可以使用cts:element-query
和cts:json-property-scope-query
将子查询范围限定为特定的容器元素或属性。这些将减少与特定祖先的子查询匹配。
cts:element-query(xs:QName('Person'), cts:element-value-query(xs:QName('Firstname', ...))
是不够的,因为Neighbour/Firstname
也是后代。
最简单的选择是在Person/Firstname
上使用路径范围索引。这是迄今为止最直接的解决方案。
HTH!