MarkLogic - 按字段限制结果

时间:2014-07-01 09:43:43

标签: database rest xquery marklogic

我有一个MarkLogic数据库,其中包含NITF格式的新闻文章,每个都有以下信息。

<date.issue norm="20140321T000000" news:date="2014-03-21" news:time="00:00:00" news:origin="Generated"/>

我使用内置的REST API来访问此数据库。我想在查询中按日期约束结果,即在日期范围之间,或在特定日期之前或之后获取所有文档。 MarkLogic的REST API如何实现这一目标?

1 个答案:

答案 0 :(得分:3)

有三个步骤:

  1. 构建索引以支持查询
  2. 配置搜索选项
  3. 撰写查询
  4. 对于#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 stringstructured 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": "<"
                }
              ]
            }
          }
        ]
      }
    }