MarkLogic Rest API:如何基于文档大小约束搜索范围?
在MarkLogic REST API中按文档大小过滤搜索结果
要过滤掉小于1MB的文档,你可以利用MarkLogic内置的xdmp:document-size()函数获取文档字节数,结合REST API的查询语法实现大小约束。以下是具体实现方式:
1. (推荐)预先创建文档大小范围索引
为了提升查询性能,尤其是在海量文档场景下,建议先创建文档大小的范围索引:
- 登录MarkLogic管理界面,进入目标数据库的范围索引配置页
- 添加新索引:
- 类型选择
xs:unsignedLong - 表达式填写
xdmp:document-size() - 命名空间留空(内置函数无需命名空间)
- 类型选择
2. 构造带大小过滤的搜索请求
方式一:JSON结构化查询(POST请求)
向/v1/search端点发送POST请求,请求体结合关键词搜索与大小范围过滤:
{ "query": { "and-query": [ { "word-query": { "text": ["你的搜索关键词"], "options": ["case-insensitive"] } }, { "range-query": { "range-operator": "GT", "value": ["1048576"], "type": "xs:unsignedLong", "expression": "xdmp:document-size()" } } ] } }
注:1048576是1MB对应的字节数(1024*1024),GT表示“大于”,这样会返回所有包含关键词且大小超过1MB的文档。
方式二:使用预定义约束简化查询
如果已经创建了范围索引,可以先定义搜索选项(保存为XML文件,通过/v1/config/query端点上传):
<search:options xmlns:search="http://marklogic.com/appservices/search"> <search:constraint name="size"> <search:range type="xs:unsignedLong" expression="xdmp:document-size()"> <search:facet-option>limit=10</search:facet-option> </search:range> </search:constraint> </search:options>
之后就可以用更简洁的查询语法:
{ "query": { "and-query": [ { "word-query": { "text": ["你的搜索关键词"] } }, { "value-query": { "constraint-name": "size", "range-operator": "GT", "text": ["1048576"] } } ] } }
方式三:GET请求参数直接传递
如果偏好GET请求,可通过URL参数组合查询:
GET /v1/search?q=你的搜索关键词&constraint=size&size:gt=1048576
内容的提问来源于stack exchange,提问作者afar
相关产品推荐
相关产品推荐

