我有一份如下文件:
<employees>
<employee>
<id>1</id>
</employee>
<employee>
<id>2</id>
</employee>
<employee>
<id>3</id>
</employee>
</employees>
我正在运行以下查询:
cts:search(/employees/employee,
cts:element-value-query(xs:QName("id"),("2")),"unfiltered")
它返回:
<employee><id>1</id></employee>
我知道将employee
设置为片段根目录将返回id为2的员工。但是我无法理解为什么这个未经过滤的搜索没有碎片只给出第一个雇员元素。请帮忙。
ML版本:8.0-1.1
答案 0 :(得分:3)
无论好坏,这都是未经过滤的搜索工作方式。
未经过滤的搜索。 未经过滤的搜索从中选择片段 满足指定cts的候选索引:query和 然后它从每个片段中返回一个节点 满足指定的可搜索路径表达式。
(请注意短语单个节点)
https://docs.marklogic.com/cts:search
其余描述提供了有关未过滤结果何时产生不可预测结果的更多详细信息。但总的来说,除了顶级节点(在您的情况下,员工 s )之外的任何其他内容都可能无法产生可预测的结果。
如果您真的想要找回员工2并使用未经过滤的搜索,请将可搜索表达式设置为doc()并通过xPath过滤结果。但是请注意大型员工文档(或其他任何数据)的开销。通常,要使用未经过滤的搜索,您应该以不同的方式构建数据(建议)或以其他方式分段根。