繁体   English   中英

如何在Marklogic中搜索一个文件

[英]How to search for one file in 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');

REST API中没有内置的机制可以基于文件的“文件名”从任何目录检索文档。 MarkLogic实际上没有“文件名”的概念。 文档URI是不透明的。

XQuery中有一种机制可以完成所需的工作。 您可以启用URI词典,并使用cts:uri-match()搜索与子字符串匹配的URI:

cts:uri-match("*" || $filename || ".xml")

如果您需要通过REST API公开此功能,则可以创建扩展模块

如果这是应用程序的常见访问模式,则应考虑将文件名插入文档的元素或属性中。 这样做将使这种类型的查询具有更高的性能(不必进行子字符串匹配),并在访问模式(例如REST API内置/keyvalue端点 )方面为您提供更大的灵活性。

如果您可以控制文档的提取,那么可能还有其他选择。 例如,您可以简单地从文档URI中截断目录。 但这将要求文件名唯一。

您也可以使用文件名作为集合,并将带有文件名的集合参数传递给/ v1 / search。 您可以调整搜索以返回摘要,元数据,还可以返回整个文档。

Joe提到的/ v1 / keyvalue方法也可以很好地工作,您也可以使用/ v1 / search来实现相同的效果,并且对包含文件名的元素或属性进行搜索约束。 除了将其插入文档本身之外,还可以将其放在文档属性中。

HTH!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM