cts: поиск и поиск: поиск при работе с документами json

Мой JSON док выглядит так:

{
  "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".

PS я заметил что search:search("anchovy", $options)/search:result дает документ, который представляется в текстовом формате, а не JSON.

Можно ли получить желаемые результаты, используя search:search в этом случае?

1 ответ

Решение

Это должно сделать работу:

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, которое нужно извлечь из документа и поместить в набор результатов.

В качестве примечания вы можете рассмотреть использование ServerSide JavaScript, если вы много работаете с документами JSON, и в этом случае вы также можете использовать jsearch.

Другие вопросы по тегам