如何在Marklogic中搜索一个文件

时间:2014-08-27 15:19:18

标签: php xquery marklogic

我正在使用 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');

2 个答案:

答案 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!