我正在评估MarkLogic在我们构建的新Java应用程序中使用以存储复杂的xml文档。其中一个要求是允许用户通过在gui中输入xpath查询来搜索文档。我无法在MarkLogic中找到一种方法来查找/ a / b / c ='A'和/ a / d / e ='B'的所有文档。我可以看到查找文件的方法,其中名称x的元素具有值y但不适用于完整的xpath。任何帮助,将不胜感激。
谢谢
布鲁斯
像这样的XPath表达式可以工作:
collection()[(/a/b/c = 'A') and (/a/d/e = 'B')]
使用cts查询可能会表现得更好,而cts:search
也允许以高性能方式对文档进行排序。使用FLWOR进行排序并不总是可以通过MarkLogic进行优化,从而导致它需要几分钟而不是亚秒。
HTH!
关于使用Java API提交搜索XPath的狭隘问题...
QueryManager使用MarkLogic Search API执行搜索请求。
您可以使用两个查询选项创建组合查询XML结构,并使用RawCombinedQueryDefinition将其包装,以将其传递给QueryManager.search():
http://docs.marklogic.com/javadoc/client/com/marklogic/client/query/RawCombinedQueryDefinition.html
查询选项可以使用search:searchable-expression元素指定受约束的XPath:
http://docs.marklogic.com/guide/search-dev/appendixa#id_60011
所有这一切,正如Geert所指出的那样,将每笔交易拆分为单独的文档会好得多,因此可以独立索引和检索文档 - 因此用户无需了解文档层次结构。