代码之家  ›  专栏  ›  技术社区  ›  Kevin Brown

升级后的问题存在于2.2到4.5之间,存在特定查询

  •  1
  • Kevin Brown  · 技术社区  · 6 年前

    我移植了一个大型数据库,其中包括一个大型客户数据库。客户订阅存储为XML文件。我导出了旧数据库并将所有这些导入到新数据库中。

    通过氧气在旧数据库中的样本数据如下所示:

    enter image description here

    不涉及任何其他内容,如果我使用oXygen在新数据库中查看XML文件,我会看到这一点(我删除了一堆私有内容),但没有什么是真正错误的,只是没有像他们说的那样漂亮的打印:

    enter image description here

    现在,我对整个集合进行一个简单的查询,如下所示:

    xquery version "3.0";
    let $colcust := '/db/EIDO/data/Customers'
    let $docnum := 'A01'
    return count(collection($colcust)/customer/portal/specialty/document[@docnum = $docnum])
    

    我得到692,这是完全正确的。这种情况有692次。完美的结果。

    现在,我想做一些索引来改进这一点。所以我创造了这个:

    <collection xmlns="http://exist-db.org/collection-config/1.0">
        <index>
            <range>
                <create qname="user_id" type="xs:string"/>
                <create qname="territory" type="xs:string"/>
                <create qname="@name" type="xs:string"/>
                <create qname="@docnum" type="xs:string"/>
                <create qname="@subscribed" type="xs:string"/>
                <create qname="lang" type="xs:string"/> 
                <create qname="title" type="xs:string"/>
                <create qname="type" type="xs:string"/>
            </range>
        </index>
    </collection>
    

    我把它放在/system/config的适当位置。 我运行同样的查询。。。我得到“0”不是692次而是0次。

    我把它放回去,现在我得到了4个。

    我回到为备份创建的ZIP文件,打开它,果然,所有文件的换行都被删除了。所以这正是进口的。

    我可能只需要创建一个将标识XSL应用于所有xml的xQuery,但这对我来说似乎是一次可怕的黑客攻击。这是已知的行为吗?如果是,是否有任何备份/还原设置不执行此操作或?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Kevin Brown    6 年前

    我会回答我自己的问题。显然索引中有什么东西在某种程度上被破坏了。当运行重新索引时,我注意到了索引时间,它看起来非常快。尽管monex应用程序显示了索引的位置。我把所有的东西都删掉了集合.xconf除了@docnum和重新编制索引,这需要更长的时间。搜索得到了正确的结果。

    然后我恢复了集合.xconf然后重新编制索引,又花了很长时间才得到正确的结果。我编辑的文档正在重新编制索引,因此这些文档受到攻击。