cts:搜索和搜索:在处理json docs时搜索

时间:2017-06-26 13:14:50

标签: search marklogic

我的json doc看起来像这样:

{
  "directions": ["Heat oil in heavy... "], 
  "rating": 5, 
  "title": "Mahi-Mahi in Tomato Olive Sauce", 
  "ingredients": [
    "2 tablespoons extra-virgin olive oil", 
    "1 cup chopped onion", 
    "1 cup dry white wine", 
    "1 teaspoon anchovy paste", 
  ], 
  "sodium": null
}

当我跑步时:

cts:search(fn:doc(),"anchovy")/title/string()

我得到:Mahi-Mahi in Tomato Olive Sauce,这是理想的。

但是当我跑步时:

search:search("anchovy", $options)/search:result/title/string()

我得到一个空序列。注意:我设置了transform-results =“raw”。

P.S我观察到search:search("anchovy", $options)/search:result提供的文档似乎是文本格式而不是json。

在这种情况下,是否可以使用search:search获得所需的结果?

1 个答案:

答案 0 :(得分:2)

这应该做的工作:

import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";

declare variable $options := <options xmlns="http://marklogic.com/appservices/search"><transform-results apply="raw" /><extract-metadata>
        <json-property>title</json-property>
    </extract-metadata></options>;

search:search("anchovy", $options)//title/text()

这里我们指定一个从文档中提取并放入结果集的JSON属性。

作为旁注,如果您正在使用JSON文档进行大量工作,则可能需要查看使用ServerSide JavaScript,在这种情况下,您还可以使用jsearch