0

未过滤的搜索给出了错误的结果。

请找到以下 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 & issue-10,volume-10 & 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"
)

/sample.xml假设示例 xml 使用uri存储在数据库中

上面的查询也将其他条目(<entry>)返回给我。

如果我将执行“过滤”搜索,上面的查询将返回正确的结果。

请告诉我,为什么会发生这种情况以及解决方案是什么

如果有任何其他好方法可以让入口节点具有组合,volume and issue请告诉我。

4

1 回答 1

4

您还应该考虑更改数据模型。当 1 个文档 = 1 行时,最好使用 MarkLogic。如果您遵循该模式,您将拥有更高效的查询并且可以使用更小的索引。索引都围绕文档中的事实,并且要获得这样的子文档限制,您需要使用位置,这可能会变得昂贵,或者过滤搜索,这会更加昂贵。

于 2017-03-02T16:03:26.627 回答