我已经在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
元素吗?
答案 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!