我正在寻找使用 JavaScript 或 XQuery 在 MarkLogic 中使用 REST API 搜索调用仅提取部分 JSON 文档的方法。 我尝试使用 re extract-document-data 的查询选项但没有成功。尝试使用 CTS.validextract 路径检查我的提取路径,但 Marklogic 9.0-1 无法识别该功能
我是否必须使用特定的搜索选项,如约束或结构化查询。 你能帮忙吗? TIA。
我有下面这样的示例文档
{
"GenreType": {
"Name": "GenreType",
"LongName": "Genre Complex",
"AttributeDataType": "String",
"GenreType Instance Record": [
{
"Name": "GenreType Instance Record",
"Action": "NoChange",
"TitleGenre": [
"Test1"
],
"GenreL": [
"Test1"
],
"GenreSource": [
"ABC"
],
"GenreT": [
"Test1"
]
},
{
"Name": "GenreType Instance Record",
"Action": "NoChange",
"TitleGenre": [
"Test2"
],
"GenreL": [
"Test2"
],
"GenreSource": [
"PQR"
],
"GenreT": [
"Test2"
]
}
]
}
}
我需要在其中搜索 GenreType 复杂属性中具有属性“TitleGenre”WHERE GenreSource =“ABC”的文档。它是 json 文档中的一个数组。
我正在使用如下搜索选项,(在 XML 中编写搜索选项,但在 json 文档中搜索)
<extract-path>/GenreType/"GenreType Instance Record"[@GenreSource="ABC"]</extract-path>
我仍然面临这些问题。如果可能的话,您能否告诉我如何搜索 json 文档来满足此类特定要求? @瓦格纳迈克尔
最佳答案
您可以使用 extract-document-data
提取文档数据option .
xquery version "1.0-ml";
let $doc := object-node {
"GenreType": object-node {
"Name": "GenreType",
"LongName": "Genre Complex",
"AttributeDataType": "String",
"GenreType-Instance-Record": array-node {
object-node {
"TitleGenre": array-node {
"Test1"
},
"GenreSource": array-node {
"ABC"
}
},
object-node {
"TitleGenre": array-node {
"Test2"
},
"GenreSource": array-node {
"PQR"
}
}}
}
}
return xdmp:document-insert("test.xml", $doc);
import module namespace search = "http://marklogic.com/appservices/search"
at "/MarkLogic/appservices/search/search.xqy";
search:search(
"Genre Complex",
<options xmlns="http://marklogic.com/appservices/search">
<extract-document-data>
<extract-path>/GenreType/GenreType-Instance-Record[GenreSource = "ABC"]</extract-path>
</extract-document-data>
</options>
)
在这种情况下 /GenreType/GenreType-Instance-Record
是提取元素的 xpath。
关于您的评论,我还添加了一个谓词 [GenreSource = "ABC"]
.只有这条路GenreType-Instance-Record
有一个 GenreSource
正在提取“ABC”!
结果:
....
<search:extracted kind="array">[{"GenreType-Instance-Record":{"TitleGenre":["Test1"], "GenreSource":["ABC"]}}]
</search:extracted>
....
注意:
- 您可以添加多个
<search:extract-path>
元素! - 我不得不更改
GenreType Instance Record
的名称至GenreType-Instance-Record
.我不确定您是否可以使用带有空格的属性名称并使用 xpath 访问它们。我无法让它以这种方式工作。
如果这对您不起作用,请发布您的搜索选项。
编辑:向提取路径添加谓词。
关于javascript - 在 MarkLogic 中使用 REST API 搜索调用仅提取部分 JSON 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52309435/