我正在使用 file_get_contents()从我的Marklogic数据库中动态检索特定文件内容。
我遇到的问题是我的XML文件存储在数据库的子文件夹中。我的确切查询当前指向一个确切的文件夹。
$test = file_get_contents('http://test:test@test.co.uk/v1/documents?uri=/contentE:/test_xml/test/23/' . $filename. '.xml');
如何编写我的查询以下类似的内容,将在 $ filename 中搜索所有文件夹和子文件夹中的值?
$test = file_get_contents('http://test:test@test.co.uk/v1/documents?uri=' . $filename. '.xml');
答案 0 :(得分:4)
REST API中没有内置机制可以根据文件名“filename”从任何目录中检索文档。 MarkLogic实际上没有“文件名”的概念;文档URI是不透明的。
XQuery中有一种机制可以实现您的目标。您可以使用cts:uri-match()
启用URI词典,并搜索与子字符串匹配的URI:
cts:uri-match("*" || $filename || ".xml")
如果您需要通过REST API公开此功能,则可以创建extension module。
如果这是应用程序的常见访问模式,则应考虑将文件名插入文档中的元素或属性。这样做会使这种类型的查询更加高效(不必进行子字符串匹配),并且在访问模式时提供更大的灵活性(例如,内置的REST API /keyvalue
endpoint)。 / p>
答案 1 :(得分:2)
如果您可以控制文档的摄取,可能还有其他选择。例如,您可以简单地从文档URI中截断目录。这需要文件名是唯一的。
您还可以将文件名用作集合,并将带有文件名的集合参数传递给/ v1 / search。您可以调整搜索以返回片段,元数据以及整个文档。
Joe提到的/ v1 / keyvalue方法也很好用,你也可以使用/ v1 / search实现相同的功能,对包含文件名的元素或属性进行搜索约束。您也可以将其放在文档属性中,而不是在文档中插入它。
HTH!