Man*_*sar 1 indexing marklogic
标记逻辑 9.0.8.2
我们的数据库中有大约 2000 万条 XML 格式的记录。
为了处理方面,我们在给定元素上创建了 element-rage-index。
它工作正常,所以没有问题。
真正的问题是,我们现在想要在系统测试(ST)、UAT、生产等不同环境中部署相同的代码。
在部署代码之前,我们必须确保给定的索引存在。所以我们提前1/2天执行。
我们注意到,在完成完整索引之前,我们无法部署我们的代码,否则它会开始显示这样的错误。
<error:code>XDMP-ELEMRIDXNOTFOUND</error:code>
<error:name/>
<error:xquery-version>1.0-ml</error:xquery-version>
<error:message>No element range index</error:message>
<error:format-string>XDMP-ELEMRIDXNOTFOUND: cts:element-reference(fn:QName("","tc"), ("type=string", "collation=http://marklogic.com/collation/")) -- No string element range index for tc collation=http://marklogic.com/collation/ </error:format-string>
Run Code Online (Sandbox Code Playgroud)
一旦索引完成,相同的代码将按预期运行。
特别是在 ST/UAT 中,如果我们得到未完成索引的部分数据,我们就可以了。
有什么办法可以做到这一点吗?否则我们会浪费太多时间来等待索引完成。
每次我们提出依赖新索引的新功能时都会发生这种情况
您只能使用范围索引,如果它存在并且可用。直到所有匹配的记录都被索引后才可用。
您应该更早地创建索引,并在部署使用它们的代码之前留出足够的时间来完成重新索引。也许让您的代码部署取决于重新索引状态,并且在完成之前不允许部署它。
如果您的应用程序的新版本可以在没有索引的情况下运行(值查询而不是范围查询),或者您可以处理返回不准确结果的查询,那么您可以启用/禁用使用它们与功能标志的代码部分,或换行with try/catch,但您确实应该在部署周期的早期创建索引。
否则,如果您在没有完整且正常运行的环境的情况下执行测试,那么您真正在测试什么?