通过MarkLogic REST API创建元素范围索引无报错但未生效
解决MarkLogic Schemas数据库元素范围索引创建失败问题
问题分析及修复方案
1. JSON语法错误导致请求失效
你的请求体中最后一个键值对末尾多了一个逗号,这是无效的JSON格式:
{"invalid-values":"reject", }
JSON规范不允许对象或数组的最后一个元素后添加逗号,MarkLogic的API可能会静默解析失败,导致索引未被创建。修复后该字段应为:
{"invalid-values":"reject"}
2. 使用错误的HTTP方法
MarkLogic Manage API中,更新现有数据库的属性(包括添加索引)需要使用PUT方法,而非POST。POST通常用于创建新资源,而PUT用于更新已有资源的配置。
3. 参数值不合法
range-value-positions不能设为空字符串,需明确指定为"true"或"false"(默认值为"false")。dateTime类型的索引不需要设置collation字段,可直接省略该参数。
修复后的完整CURL命令
curl -X PUT --digest -u admin:admin@123 -H "Content-type: application/json" \ -d '{ "range-element-indexes":[ {"scalar-type":"dateTime", "namespace-uri":"", "localname":"test", "range-value-positions":"false", "invalid-values":"reject" } ] }' \ http://127.0.0.1:8002/manage/v2/databases/Schemas/properties
验证索引是否创建成功
执行命令后,可通过两种方式确认:
- 登录MarkLogic管理控制台(
http://127.0.0.1:8001),进入Schemas数据库的索引配置页面查看。 - 使用Manage API查询数据库属性:
curl --digest -u admin:admin@123 http://127.0.0.1:8002/manage/v2/databases/Schemas/properties?format=json
在返回结果的range-element-indexes数组中,检查是否包含你创建的索引项。
内容的提问来源于stack exchange,提问作者Rashmita Purkayastha
相关产品推荐
相关产品推荐

