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.