Marklogic “的意外行为”;“未过滤”;标记逻辑中的搜索

Marklogic “的意外行为”;“未过滤”;标记逻辑中的搜索,marklogic,marklogic-7,cts-search,Marklogic,Marklogic 7,Cts Search,未经筛选的搜索给出了错误的结果 请查找以下xml示例和问题 样本: <root> <id1>11</id1> <elem1>ee1</elem1> <ele2>ee2</ele2> <entry> <volume>10</volume> <issue>10</issue> &

未经筛选的搜索给出了错误的结果

请查找以下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>
假设示例xml以
/sample.xml
uri存储在数据库中

上面的查询还将返回其他条目(

如果我将执行“筛选的”搜索,上述查询将返回正确的结果

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


如果有其他好的方法让入口节点具有“代码>卷和发行< /代码>的组合,请让我知道。

你也应该考虑改变你的数据模型。当1个文档=1行时,最好使用MarkLogic。如果遵循这种模式,您将有更高效的查询,并且可以使用更小的索引。这些索引都是面向文档中的事实,并得到子文档的限制,像这样,您需要使用位置,这可以得到昂贵的或过滤的搜索,甚至更昂贵。

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

尝试启用索引
元素值位置
@wst它已经设置为“true”但是仍然面临这个问题。我记不太清楚了,但是您也可以尝试
单词位置
元素单词位置
。否则,我认为这将耗尽索引中可以解析的内容,从而导致未过滤的查询,并且您需要重新建模数据。为什么要使用“不区分大小写”和“不区分大小写”来匹配数字?你有没有试过把它们去掉?另外,您看过cts:element查询了吗?我希望在cts中看到这一点:并查询是否希望两个匹配项仅在一个元素中匹配。不过,我现在还不知道你是否可以不经筛选地执行这种类型的查询。@SamMefford只是为了解释我使用数值的问题。但在实际卷中,问题节点将包含字符串类型。我也尝试过cts:element查询。。。但是没有收获..尝试启用索引
元素值位置
@wst它已经设置为“true”,但仍然面临问题。我记不太清楚,但您也可以尝试
单词位置
元素单词位置
。否则,我认为这将耗尽索引中可以解析的内容,从而导致未过滤的查询,并且您需要重新建模数据。为什么要使用“不区分大小写”和“不区分大小写”来匹配数字?你有没有试过把它们去掉?另外,您看过cts:element查询了吗?我希望在cts中看到这一点:并查询是否希望两个匹配项仅在一个元素中匹配。不过,我现在还不知道你是否可以不经筛选地执行这种类型的查询。@SamMefford只是为了解释我使用数值的问题。但在实际卷中,问题节点将包含字符串类型。我也尝试过cts:element查询。。。但是没有收获。。
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"
)