我有一个MarkLogic数据库,其中包含NITF格式的新闻文章,每个都有以下信息。
<date.issue norm="20140321T000000" news:date="2014-03-21" news:time="00:00:00" news:origin="Generated"/>
我使用内置的REST API来访问此数据库。我想在查询中按日期约束结果,即在日期范围之间,或在特定日期之前或之后获取所有文档。 MarkLogic的REST API如何实现这一目标?
答案 0 :(得分:3)
有三个步骤:
对于#1,你需要在news:date上有一个xs:date range index。范围索引允许>,≥,=,≤,&lt;比较。
对于#2,您需要使用news:date索引构建约束。它看起来像something like this:
<constraint name="news-date">
<range type="xs:date">
<element ns="news" name="date"/>
</range>
</constraint>
请注意,element / @ ns的值必须是完整的命名空间URI,而不仅仅是前缀。此约束配置将成为your REST API configuration的一部分。 (你也have the option to use QBE instead.)
对于#3,查询将在客户端构建并发送到服务器上的REST API。查询可以表示为query string或structured query。作为一个查询字符串,你可以这样做:
news-date GT 2010-01-01 AND news-date LT 2010-12-31
要使其正常工作,请确保您的REST API配置包括the default query string grammar中显示的LT,GT和AND。
结构化查询表示为JSON或XML。这是与JSON相同的查询:
{
"query": {
"queries": [
{
"and-query": {
"queries": [
"range-constraint-query": {
"value": [ "2010-01-01" ],
"constraint-name": "news-date",
"range-operator": ">"
},
"range-constraint-query": {
"value": [ "2010-12-31" ],
"constraint-name": "news-date",
"range-operator": "<"
}
]
}
}
]
}
}