如何在marklogic中的现有元素范围索引中添加排序规则

时间:2017-10-11 11:28:19

标签: indexing marklogic marklogic-7

我已经在MarkLogic 7中使用标量类型gYear创建了一个元素范围索引。我编写了以下脚本,运行它并成功创建索引,

xquery version "1.0-ml";
import module namespace admin = "http://marklogic.com/xdmp/admin" at "/MarkLogic/admin.xqy";
let $newRangeIndexes := (
    <range-element-index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://marklogic.com/xdmp/database">
      <scalar-type>gYear</scalar-type>
      <namespace-uri>http://www.dummy.com/namespaces/dummy</namespace-uri>
      <localname>dummyValue</localname>
      <range-value-positions>false</range-value-positions>
    </range-element-index>
)
  let $config := admin:get-configuration()
  let $dbid := xdmp:database()
  let $newConfig :=  admin:database-add-range-element-index($config, $dbid, $newRangeIndexes)
  return
     admin:save-configuration($newConfig)*

它不包含collation元素,因为gYear标量类型不是必需的。创建此索引后,元素invalid-values的默认值为reject

现在我需要更新此现有索引(我必须将invalid-values的值修改为ignore)。当我尝试这样做时,由于缺少collation元素,我收到错误。我发现只有一个解决方案是删除索引并重新创建在我的情况下是不可接受的。

所以我想首先在这个现有索引中添加一个空的collation元素,然后我将对invalid-values应用我的更改。那么还有其他方法(除了删除现有的方法)更新现有的元素范围索引配置以添加空的collation元素吗?

1 个答案:

答案 0 :(得分:1)

我建议不要手动创建索引的XML定义,而是使用管理功能来创建索引。在你的情况下,本来是admin:database-range-element-index

我不会过分担心删除和重新创建索引。如果组合删除和添加,并同时保存两者,MarkLogic将仅根据需要应用更改。

要使用不同的元素替换特定元素的现有定义,您可以执行以下操作:

/**
 * Convert a comma delimited list (e.g., a row from a CSV file) into a set.
 * <p>Note that this will suppress duplicates, and as of 4.2, the elements in
 * the returned set will preserve the original order in a {@link LinkedHashSet}.
 * @param str the input {@code String}
 * @return a set of {@code String} entries in the list
 * @see #removeDuplicateStrings(String[])
 */
public static Set<String> commaDelimitedListToSet(@Nullable String str) {

HTH!