我有几个文件,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()要求我传递一个值来匹配属性值.但我想只检查属性的存在,而不管它包含什么值.
是否已在ML 8中支持路径索引的排序顺序?我想实现类似下面的:
<options xmlns="http://marklogic.com/appservices/search">
<sort-order collation="http://marklogic.com/collation/en/S1/EO/CU/MO" type="xs:string" direction="ascending">
<path-index>attritbutes//name</path-index>
</sort-order>
</options>
Run Code Online (Sandbox Code Playgroud)
如果没有,有没有办法实现这一目标?我有几个具有相同名称的元素来自不同的父节点或根元素,所以我不能只使用
<options xmlns="http://marklogic.com/appservices/search">
<sort-order collation="http://marklogic.com/collation/en/S1/EO/CU/MO" type="xs:string" direction="ascending">
<element ns="" name="name"/>
</sort-order>
</options>
Run Code Online (Sandbox Code Playgroud) 鉴于此文件: -
<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努力向我提供我期望的结果的东西,并且如果我有更多或更好的索引,我将不太可能得到误报.
我正在运行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)
有关根本原因和可能修复的任何想法?
我有一个函数,我写了一个序列号的生成.功能如下:
declare function generate-instrument-Id( $cnt as xs:int? )
as xs:int {
let $count := if( $cnt and $cnt > 0 ) then $cnt else 1
let $url := '/private/instrumentId-Sequence.xml'
(: this redirection is needed to write id in another
transaction context :)
return xdmp:invoke-function( function() {
let $id := fn:doc( $url )/instrument/@nextId
let $_ := xdmp:node-replace( $id
, attribute nextId { $id + $count } )
return $id
}
)
};
Run Code Online (Sandbox Code Playgroud)
使用以下测试代码,qconsole窗口中的函数可以正常工作:
let res := util:generate-instrument-Id( 1 )
return fn:error( …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) 使用属于HTML5的新doctype和元素,您如何xdmp:tidy()识别HTML5中的那些?
如果我有一个包含以下内容的html页面:
<!DOCTYPE html>
<html>
<header>blah</header>
<section>blah</section>
Run Code Online (Sandbox Code Playgroud)
然后尝试类似的东西:
xdmp:tidy(xdmp:document-get("home.html"))
我得到的错误如下:
<section> is not recognized! discarding unexpected <section>
<header> is not recognized! discarding unexpected <header>
Run Code Online (Sandbox Code Playgroud)
我可以发送一些选项xdmp:tidy()让它来处理它吗?
我正在尝试搜索特定元素,因此我在我的选项中有一个可搜索表达式.我还想按这个元素的值排序,所以我在value元素上创建了一个元素范围索引.以下是我的搜索选项,希望能让事情变得清晰:
<options xmlns="http://marklogic.com/appservices/search">
<term>
<term-option>case-insensitive</term-option>
</term>
<debug>true</debug>
<searchable-expression>/summary/name/value</searchable-expression>
<sort-order type="xs:string" direction="ascending">
<element ns="" name="value"/>
<annotation>options for search institutions by name</annotation>
</sort-order>
</options>
Run Code Online (Sandbox Code Playgroud)
问题是当它进行排序时它会添加另一个值节点(取自搜索:report id ="SEARCH-FLWOR")
...order by xs:string(($result//value)[1]) ascending return $result)[1 to 50]
Run Code Online (Sandbox Code Playgroud)
代替:
...order by xs:string(($result)[1]) ascending return $result)[1 to 50]
Run Code Online (Sandbox Code Playgroud)
我如何阻止它这样做?我无法更改可搜索的表达式,因为"name"元素具有另一个我不想搜索的子元素.我也不能将sort-order元素名称留空或将其设置为当前节点.看起来这很简单,但我还没有找到任何工作.
非常感谢帮助.
我有一个场景,我想要删除的大多数文件都在一个名为"过期"的集合中.我不希望通过运行一个长时间运行的进程来重载我的服务器,这个进程将遍历文档并逐个删除它们,我宁愿使用document-delete以批量大小来执行它们.
所以我的问题是xdmp:collection-delete是如何工作的?
它是否迭代文档并删除它们?
要么
它是否像SQL中的DROP Table和它的"瞬时"一样?
我想知道xdmp:collection-delete的后台进程是什么.我想知道是否有人可以绘制该函数如何处理文档以进行删除的流程,因为我想要更深入地理解该过程,而不仅仅是概述它的作用.