Indexing 元素范围索引和搜索可用性

Indexing 元素范围索引和搜索可用性,indexing,marklogic,Indexing,Marklogic,MarkLogic 9.0.8.2 我们的数据库中有大约2000万条XML格式的记录 为了处理facet,我们在给定元素上创建了元素rage索引 它工作正常,所以没有问题 真正的问题是,我们现在想要在不同的环境(如SystemTestST、UAT、Production)上部署相同的代码 在部署代码之前,我们必须确保给定的索引存在。所以我们提前1/2天执行 我们注意到,在完成完整索引之前,我们无法部署代码,否则它将开始显示类似这样的错误 <error:code>XDMP-ELE

MarkLogic 9.0.8.2

我们的数据库中有大约2000万条XML格式的记录

为了处理facet,我们在给定元素上创建了元素rage索引

它工作正常,所以没有问题

真正的问题是,我们现在想要在不同的环境(如SystemTestST、UAT、Production)上部署相同的代码

在部署代码之前,我们必须确保给定的索引存在。所以我们提前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>
一旦索引完成,相同的代码将按预期运行

特别是在ST/UAT中,如果我们得到的部分数据没有完成索引,我们就可以了

我们有没有办法做到这一点?否则我们就浪费了太多的时间来等待索引完成


每当我们推出依赖于新索引的新功能时,都会发生这种情况。只有在范围索引存在且可用时,才能使用范围索引。在对所有匹配的记录编制索引之前,它不可用

您应该更早地创建索引,并在部署使用索引的代码之前留出足够的时间完成重新索引。可能使代码部署依赖于重新索引状态,并且在完成之前不允许部署

如果应用程序的新版本可以在没有索引值查询而不是范围查询的情况下运行,或者您对返回不准确结果的查询没有意见,那么您可以使用功能标志启用/禁用代码段,或者使用try/catch进行换行,但是您确实应该在部署周期的早期创建索引


否则,如果您在没有完整且功能正常的环境的情况下执行测试,那么您真正要测试的是什么?

您只能使用范围索引(如果它存在并且可用)。在对所有匹配的记录编制索引之前,它不可用

您应该更早地创建索引,并在部署使用索引的代码之前留出足够的时间完成重新索引。可能使代码部署依赖于重新索引状态,并且在完成之前不允许部署

如果应用程序的新版本可以在没有索引值查询而不是范围查询的情况下运行,或者您对返回不准确结果的查询没有意见,那么您可以使用功能标志启用/禁用代码段,或者使用try/catch进行换行,但是您确实应该在部署周期的早期创建索引


否则,如果您在没有完整且功能正常的环境下执行测试,您真正测试的是什么?

您是否尝试过调整reindexer油门?您是否尝试过调整reindexer油门?您好,Mads Hansen,谢谢您的回答,好的,明白了。我们还部署了不依赖于要完成的索引的新功能/错误,因此在索引完成时,测试团队会对其他场景执行测试。为了更快地完成索引,假设我们必须创建3个索引,我们是单独创建每个索引还是一起创建它们?或者没关系?如果一个文档有与索引匹配的内容,它将需要重新编制索引,因此一次重新保存文档更有效。你好,MH,谢谢你的回复,我的意思是如果我们有大约2/3的新功能和所有必需的索引,那么最好在完成后创建一个索引,创建一个新文档或一次创建所有文档并等待所有文档完成?减少测试数据库中的文档数量如何?您是否需要在每个文档中包含2000万个文档?更少的文档意味着更快的索引,所以这可能是解决您的挑战的一个解决方案。你好,Mads Hansen,谢谢您的回复,好的,明白了。我们还部署了不依赖于要完成的索引的新功能/错误,因此在索引完成时,测试团队会对其他场景执行测试。为了更快地完成索引,假设我们必须创建3个索引,我们是单独创建每个索引还是一起创建它们?或者没关系?如果一个文档有与索引匹配的内容,它将需要重新编制索引,因此一次重新保存文档更有效。你好,MH,谢谢你的回复,我的意思是如果我们有大约2/3的新功能和所有必需的索引,那么最好在完成后创建一个索引,创建一个新文档或一次创建所有文档并等待所有文档完成?减少测试数据库中的文档数量如何?您是否需要在每个文档中包含2000万个文档?更少的文档意味着更快的索引,所以这可能是解决您的挑战的一个解决方案,以及。。。