使用transform-results元数据片段的MarkLogic搜索REST api不适用于json请求

时间:2014-09-30 11:44:22

标签: marklogic

以下对搜索API的json请求给出了没有请求转换的搜索结果:

{
  "search": {    
    "qtext": "some query",
    "options": {
      "term": { "apply": "term", "term-option": ["lang=nl"] },
      "transform-results": {
        "apply": "metadata-snippet",
        "preferred-elements": [ { "name": "title", "ns": "" } ]
      }
    }
  }
}

当执行与xml请求相同的调用时,我会获得请求的元数据片段转换:

<search xmlns="http://marklogic.com/appservices/search">  
  <qtext>some query</qtext>
  <options>
    <term apply="term">
        <term-option>lang=nl</term-option>
    </term>
    <transform-results  apply="metadata-snippet">
        <preferred-elements>
            <element name="title" ns=''/>
        </preferred-elements>
    </transform-results>
  </options>
</search>

我的json出了什么问题?

完整的请求信息:

POST /v1/search HTTP/1.1
Host: localhost:8003
Content-Type: application/json
Accept: application/json
Cache-Control: no-cache

{ "search": { "qtext": "some query", "options": { "term": { "apply": "term", "term-option": ["lang=nl"] }, "transform-results": { "apply": "metadata-snippet", "preferred-elements": [ { "name": "title", "ns": "" } ] } } } }

2 个答案:

答案 0 :(得分:1)

metadata-snippet查找文档属性中的元素。你确定标题在那里吗?如果它在文档中,请使用snippet而不是metadata-snippet

HTH!

答案 1 :(得分:0)

跟进评论讨论(需要格式化)。由于您只想指定一些标题,我建议使用基于路径的约束,然后使用它来获取结果。您将需要此方法的路径范围索引。

<options xmlns="http://marklogic.com/appservices/search">
  <extract-metadata>
    <constraint-value ref="title"/>
  </extract-metadata> 
  <constraint name="title">
    <range type="xs:string" facet="false">
      <path-index xmlns:my="http://example.com">
        /root/my:title
      </path-index>
    </range>
  </constraint>
</options>

如果这不起作用,探索的下一个选择是search response transformation,但我希望这会更简单。