Marklogic无法创建元素范围索引

时间:2018-12-14 18:44:32

标签: marklogic

无法创建元素范围索引。 错误无效的强制范围-元素索引xmlns =“ http://marklogic.com/xdmp/database”> ......作为元素(配置)

我数据库中有超过1亿个文档需要索引“ tr:ModifiedDate”。

 <?xml  version="1.0" encoding="UTF-8"?>
 <mdra:Record Type="TR" xmlns:mdra="http://dvtech.com/mdra/record">
 <tr:Raw xmlns:tr="http://dvtech.com/mdra/record/tr">
        <tr:History>
           <tr:ModifiedDate>2009-03-18T09:07:23.000-04:00</tr:ModifiedDate>
           <tr:DrolsNdxDate>2002-07-05T18:33:26.000-04:00</tr:DrolsNdxDate>
        </tr:History>            

        <tr:TrlType>
           <tr:Code>0</tr:Code>
       </tr:TrlType>
</tr:Raw>  
</mdr:Record>

我在tr:ModifiedDate上创建了element-range-index,但是无法创建它。错误显示强制无效。我不知道是什么原因造成的。

xquery version "1.0-ml";

import module namespace admin = "http://marklogic.com/xdmp/admin"
      at "/MarkLogic/admin.xqy";

let $config := admin:get-configuration()
let $dbid := xdmp:database("IAD")

let $rangespec := admin:database-range-element-index("dateTime",                            
          "http://dvtech.com/mdra/record/tr",
          "ModifiedDate",       
          "http://marklogic.com/collation/",
          fn:false() )

 return
 admin:save-configuration($rangespec)

1 个答案:

答案 0 :(得分:3)

管理库围绕$ config展开。您需要更新该配置,然后保存该配置,而不仅仅是一个索引定义。您可以使用admin:database-add-range-element-index来执行此操作。正确的做法是这样的:

xquery version "1.0-ml";

import module namespace admin = "http://marklogic.com/xdmp/admin"
      at "/MarkLogic/admin.xqy";

let $config := admin:get-configuration()
let $dbid := xdmp:database("IAD")

let $rangespec := admin:database-range-element-index(
  "dateTime",                            
  "http://dvtech.com/mdra/record/tr",
  "ModifiedDate",       
  "http://marklogic.com/collation/",
  fn:false()
)

let $config := admin:database-add-range-element-index($config, $dbid, $rangespec)
return
  admin:save-configuration($config)

您可以通过一次调用该函数来添加多个范围索引。

我还要提及一些部署工具,这些工具可以帮助将范围索引部署到MarkLogic中。一个很好的例子是ml-gradle

HTH!