未过滤的搜索结果错误。
请找到以下xml样本和问题。
样品:
<root>
<id1>11</id1>
<elem1>ee1</elem1>
<ele2>ee2</ele2>
<entry>
<volume>10</volume>
<issue>10</issue>
<elemEntry>eleme</elemEntry>
</entry>
<entry>
<volume>20</volume>
<issue>20</issue>
<elemEntry>eleme</elemEntry>
</entry>
<entry>
<volume>20</volume>
<issue>10</issue>
<elemEntry>eleme</elemEntry>
</entry>
<entry>
<volume>10</volume>
<issue>20</issue>
<elemEntry>eleme</elemEntry>
</entry>
</root>
我必须得到<volume> & <issue>
值组合的入口节点都应出现在<entry>
节点下(例如:volume-10&amp; issue-10,volume-10&amp; issue-20)
如上例所示,我需要整个输入节点为<volume> (10), <issue> (10)
。
它不应该返回其他入口节点,因为其他入口节点没有所需的volume
(值10),issue
(值10)组合。
请在下面找到我正在做的cts:search
。
cts:search(
doc("/sample.xml")//entry,
cts:and-query((
cts:element-value-query(xs:QName("volume"), "10", ("case-insensitive","unstemmed")),
cts:element-value-query(xs:QName("issue"), "10", ("case-insensitive","unstemmed"))
)),
"unfiltered"
)
假设样本xml存储在具有/sample.xml
uri
以上查询也会返回其他条目(<entry>
)。
如果我执行&#34;过滤&#34; 搜索,则上述查询会返回正确的结果。
请告诉我,为什么会这样,解决方案是什么。
如果还有其他好办法让条目节点与volume and issue
组合,请告诉我。
答案 0 :(得分:4)
您还应该考虑更改数据模型。当1个文档= 1行时,最好使用MarkLogic。如果您遵循该模式,您将拥有更高效的查询并可以使用更小的索引。索引都是以文档中的事实为导向的,并且要获得像这样的子文档限制,你需要使用位置,这可能会变得昂贵,或者过滤搜索,这些更加昂贵。