使用MarkLogic但这可能是一个通用的XQuery问题.
我有:
<library>
<books>
<book title="whatever">
<publisher>Random</publisher>
....more children
</book>
<book title="another">
<publisher>Simon</publisher>
....more children
</book>
...
</books>
</library>
Run Code Online (Sandbox Code Playgroud)
我想要返回所有[book]元素及其title属性,但我不想要任何书籍的孩子,例如[publisher].我如何以正统和高效的方式实现这一目标?
相关问题:有时我可能想要得到一些孩子,而不是其他孩子,例如获得所有书籍元素和他们的出版商子元素,但没有其他孩子.
谢谢.
我有几个文件,xdmp:node-replace()某些元素不起作用.还有一些其他的文档几乎与那些有问题的文档类似,但xdmp:node-replace对它们完全正常.尝试了所有可能出错但却徒劳无功的可能性.阅读一些xdmp:node-replace函数在" 内存元素 "中不起作用的地方.
因此,为了验证问题是否与" 内存元素 "有关,我想知道究竟是什么.
对它有任何启发都会有很大的帮助
cts:element-query(xs:QName("elm"),cts:and-query(()))将给出元素榆树存在的所有片段.
同样地,如果我想要所有在elm下存在属性(例如atr)的文档,我还需要做什么?
cts:element-attribute-value-query()要求我传递一个值来匹配属性值.但我想只检查属性的存在,而不管它包含什么值.
嘿我想从给定的MarkLogic数据库中获取所有文档名称/ uri的列表.
我在stackoverflow中找到了这一行: 如何获取Marklogic数据库中的文档总数?
...将获取数据库中的文档计数.我不知道如何修改它以列出所有文档URI.
还给出了一个文档URI,我想看看它是否存在于数据库中?
我试过以下,但无法实现同样的目标
for $x in xdmp:directory("/myDirectory/", "1")
return
fn:document-uri($x)
Run Code Online (Sandbox Code Playgroud)
我需要一个像这样的Xquery命令.我是marklogic的新手,有人可以帮我吗?
我需要在MarkLogic中的XQuery中构建一个JSON节点.我知道我可以使用xdmp:unquote()从字符串解析为node().但是,我想以编程方式构建JSON,而不需要丑陋的字符串连接.我可以使用计算元素构造函数在XQuery中构建XML节点.JSON节点有类似的东西吗?
鉴于此文件: -
<items>
<item><type>T1</type><value>V1</value></item>
<item><type>T2</type><value>V2</value></item>
</items>
Run Code Online (Sandbox Code Playgroud)
不出所料,我发现这将拉回页面cts:uris(): -
cts:and-query((
cts:element-query(xs:QName('item'),
cts:element-value-query(xs:QName('type'),'T1')
),
cts:element-query(xs:QName('item'),
cts:element-value-query(xs:QName('value'),'V2')
)
))
Run Code Online (Sandbox Code Playgroud)
但有点令人惊讶(至少对我来说)我也发现这也是: -
cts:element-query(xs:QName('item'),
cts:and-query((
cts:element-value-query(xs:QName('type'),'T1'),
cts:element-value-query(xs:QName('value'),'V2')
))
)
Run Code Online (Sandbox Code Playgroud)
这似乎不对,因为没有type = T1和value = V2的单个项目.对我来说,这似乎是一种误报.
我误解了cts:element-query有效吗?(我不得不说文档在这个领域并不是特别清楚).
或者这是MarkLogic努力向我提供我期望的结果的东西,并且如果我有更多或更好的索引,我将不太可能得到误报.
我正在使用MLCP(Marklogic内容泵)将内容从一个数据库复制到另一个数据库.在这个我使用-query_filter选项,它的值是一个cts:查询以XML序列化格式的一组cts:element-range-query包装在cts:and-query中:
<cts:and-query xmlns:cts="http://marklogic.com/cts">
<cts:element-range-query operator=">">
<cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element>
<cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2000-12-21T00:00:00Z</cts:value>
</cts:element-range-query>
<cts:element-range-query operator="<">
<cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element>
<cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2016-12-21T00:00:00Z</cts:value>
</cts:element-range-query>
</cts:and-query>
Run Code Online (Sandbox Code Playgroud)
现在,上面的查询在ML Qconsole上执行时返回有效结果,但是当传入MLCP的-query_filter选项时,它会给出错误"无效属性值字符"<'.
Marklogic和MLCP的版本是8.0-5.
在进一步深入研究这个问题时,我发现只有当运算符值小于'<'时才会出现问题.
注意:我已在数据库中为"已启动"元素配置了有效的范围索引.
我正在运行MarkLogic版本8.0-6.1.
主机操作系统是红帽企业Linux服务器版本6.8(圣地亚哥).
数据存储在具有90%可用空间的本地磁盘上.
服务器运行得相当好,但偶尔会抛出以下错误.
SVC-FILWRT: File write error: write '/var/opt/MarkLogic/Forests/clickstream-1/0000008a/ListData': File too large
Run Code Online (Sandbox Code Playgroud)
有关根本原因和可能修复的任何想法?
我们在CentOS上运行了MarkLogic服务器,并定义了ODBC端点.当我尝试通过Power BI与ODBC连接时,我收到以下错误.
我有一个类似的MarkLogic服务器在本地运行,我没有任何问题通过ODBC连接.
笔记:
8052_ErrorLog.txt中没有任何内容,但是,在8052_AccessLog.txt中我看到了:
192.168.21.34 - nickh [23/Mar/2017:09:43:36 -0400] init
192.168.21.34 - nickh [23/Mar/2017:09:43:36 -0400] password
192.168.21.34 - nickh [23/Mar/2017:09:43:36 -0400] query
192.168.21.34 - nickh [23/Mar/2017:09:43:36 -0400] query
192.168.21.34 - nickh [23/Mar/2017:09:43:36 -0400] query
192.168.21.34 - nickh [23/Mar/2017:09:43:36 -0400] query
192.168.21.34 - nickh [23/Mar/2017:09:43:36 -0400] query
192.168.21.34 - nickh [23/Mar/2017:09:43:36 -0400] terminate
Run Code Online (Sandbox Code Playgroud) 我很难找到有关输出xdmp:plan意味着什么的详细信息.
有这样一个简单的查询:
xdmp:plan(cts:search(doc(), cts:element-value-query(xs:QName("description"), "some text")))
Run Code Online (Sandbox Code Playgroud)
导致相当长的执行计划:
<qry:query-plan xmlns:qry="http://marklogic.com/cts/query">
<qry:expr-trace>...</qry:expr-trace>
...
<qry:partial-plan>
<qry:term-query weight="1">
<qry:key>16037778974159125508</qry:key>
<qry:annotation>element(description,value("some","text"))</qry:annotation>
</qry:term-query>
</qry:partial-plan>
...
<qry:ordering></qry:ordering>
<qry:final-plan>
<qry:and-query>
<qry:term-query weight="1">
<qry:key>16037778974159125508</qry:key>
<qry:annotation>element(description,value("some","text"))</qry:annotation>
</qry:term-query>
</qry:and-query>
</qry:final-plan>
<qry:info-trace>Selected 0 fragments to filter</qry:info-trace>
<qry:result estimate="0"></qry:result>
</qry:query-plan>
Run Code Online (Sandbox Code Playgroud)
提到文档的唯一部分xdmp:plan是其文档本身.除此之外,我找不到任何其他东西.我想了解一些关于例如qry:key或qry:annotation真正含义的细节.
有没有我缺少的文件描述可能的输出xdmp:plan.由于这是一个非常有价值的工具,以便了解查询性能,我希望它有很好的文档记录.
编辑:我发现的这个marklogic博客文章给出了一些如何解释查询计划的例子.
不过,我觉得自己像一个博客帖子应该不会是唯一合理的文档,这个工具.
我仍在思考一些问题:
partial-plan和a 之间的区别final-plan.是一个final-plan合并的所有partial-plans?什么时候partial-plan使用?部分计划似乎有助于制约.在索引解析阶段使用这些约束来查找候选片段ID吗?什么样的角色一final-plan玩吗?是否final-plan用于在索引解析后过滤掉误报?有时我可以在查询计划中找到它:
<qry:elem-word-trace text="computer" elem-name="title" …Run Code Online (Sandbox Code Playgroud) marklogic ×10
xquery ×5
marklogic-8 ×2
xml ×2
database ×1
json ×1
marklogic-9 ×1
mlcp ×1
odbc ×1
powerbi ×1
xpath ×1
xquery-sql ×1