Marklogic не может создать индекс диапазона элементов - PullRequest
0 голосов
/ 14 декабря 2018

Не удалось создать индекс диапазона элемента.Ошибка Недопустимое приведение range-element-index xmlns = "http://marklogic.com/xdmp/database">...... как элемент (конфигурация)

У меня более 100 миллионов документов в базе данных, необходимо проиндексировать" 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>

Я создаю element-range-index для tr: ModifiedDate, но не могу его создать. Ошибка показывает недопустимое принуждение. Я не мог выяснить, с чем это связано.

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 голосов
/ 14 декабря 2018

Библиотека администратора вращается вокруг $ 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.Хорошим примером является мл-gradle .

HTH!

...