假设我在这样的集合中有大约5000万条记录:
<record>
<some_data>
<some_data_id>112423425345235</some_data_id>
</some_data>
</record>
Run Code Online (Sandbox Code Playgroud)
所以我可能有一百万条记录(坏数据),如下所示:
<record>
<some_data>
</some_data>
</record>
Run Code Online (Sandbox Code Playgroud)
some_data元素为空.所以如果我element-range-index在some_data_id上有一个设置,那么什么是一个有效的XQuery查询,它会给我所有空的删除?
我认为我正在寻找的是一个不是FLWOR的查询,你检查每个元素的子记录的存在,因为我认为这是低效的(即拉回数据然后过滤)?
然而,如果我在cts:search查询中执行它,那么它会更有效,就像在将数据拉回之前过滤数据一样?
请编写一个可以有效执行此操作的查询,并确认我对FLWOR语句的假设是否正确.
我正在使用MarkLogic Content Pump来提取XML文档。我想使用“ -transform模块和-transform名称空间”选项在mlcp提取过程中转换这些xml文档。我已经为转换创建了XSLT,并将其加载到ML“模块”数据库中,但是mlcp不接受xslt文件并抛出错误:
命令:
mlcp.sh import \
-username $username -password $passwd \
-host $host -port $port \
-input_file_path $inpath \
-input_compressed true \
-input_file_type aggregates \
-aggregate_record_element $splittag \
-aggregate_uri_id $uriid \
-aggregate_record_namespace "http://www.fda.gov/cdrh/gudid" \
-output_collections $collection \
-output_permissions my-app-role,read,my-app-role,update \
-output_uri_suffix .xml \
-transform_module /marklogic.rest.transform/xml-transform-xsl/assets/transform.xsl \
-transform_namespace "http://marklogic.com/rest-api/transform/xml-transform-xsl" \
-transform_function transform
Run Code Online (Sandbox Code Playgroud)
下面的错误抛出ERROR:
15/09/27 15:34:19 WARN mapreduce.ContentWriter: XDMP-MODNOTTEXT: Module /marklogic.rest.transform/fda-transform-xsl/assets/transform.xsl is not a text document
Run Code Online (Sandbox Code Playgroud)
我想知道mlcp是否接受xslt转换?如果没有,那有什么选择呢?
MarkLogic在模块数据库中创建等效的xqy文件。通过在“ .xqy”文件下面调用,将引发参数不匹配错误:我认为这是由于错误的返回类型造成的:
xquery version "1.0-ml";
module namespace simple-xsl = "http://marklogic.com/rest-api/transform/simple-xsl";
import module namespace …Run Code Online (Sandbox Code Playgroud) 我有一个名为"监控"的角色,能够在MarkLogic中插入/查看文档.我想添加删除文档的权限,但我不知道是否需要赋予它"执行"权限.
我的角色如下:
<role>
<role-name>moderators-role</role-name>
<description>The role assigned to the zabbix user that monitor all server apps</description>
<permissions>
<permission>
<capability>read</capability>
<role-name>moderators-role</role-name>
</permission>
<permission>
<capability>update</capability>
<role-name>moderators-role</role-name>
</permission>
</permissions>
<privileges>
<privilege>
<privilege-name>rest-writer</privilege-name>
</privilege>
<privilege>
<privilege-name>rest-reader</privilege-name>
</privilege>
</privileges>
</role>
Run Code Online (Sandbox Code Playgroud) 我尝试过下面提到的 XQuery 。
declare variable $path as xs:string :="D:\Mongo\";
let $uri :="/MJ/1932/Vol1/Part1/387.xml"
let $x := fn:normalize-space(fn:replace($uri,"/"," "))
for $i in fn:tokenize($x, " ")
let $j := fn:concat($path,$i)
return($j)
Run Code Online (Sandbox Code Playgroud)
实际产量
D:\Mongo\MJ
D:\Mongo\1932
D:\Mongo\Vol1
D:\Mongo\Part1
D:\Mongo\387.xml
Run Code Online (Sandbox Code Playgroud)
预期产出
D:\Mongo\MJ
D:\Mongo\MJ\1932
D:\Mongo\MJ\1932\Vol1
D:\Mongo\MJ\1932\Vol1\Part1
D:\Mongo\MJ\1932\Vol1\Part1\387.xml
Run Code Online (Sandbox Code Playgroud)
请建议我如何更改动态变量值。
我有一个内容存储库,其中最新版本的文档使用 IsLatestVersion 三元组。
这是带有 isLatestVersion 三元组的文档示例。
Document URI: /Transaction/00000000000101000000/1.xml
<aptp:Transaction xmlns:aptp="http://sample.com/aptp">
<aptp:TransactionDate>2016-07-28</aptp:TransactionDate>
<aptp:TransactionType>Principal</aptp:TransactionType>
<aptp:Operation>Buy</aptp:Operation>
<sem:triple name="isLatestVersion"
xmlns:aptp="http://sample.com/aptp"
xmlns:sem="http://marklogic.com/semantics">
<sem:subject datatype="http://www.w3.org/2001/XMLSchema#string">
/Transaction/00000000000101000000/1.xml
</sem:subject>
<sem:predicate>isLatestVersion</sem:predicate>
<sem:object datatype="http://www.w3.org/2001/XMLSchema#boolean">true</sem:object>
</sem:triple>
</aptp:Transaction>
Run Code Online (Sandbox Code Playgroud)
我希望以下代码片段返回最新版本 uri 的序列。它当前返回一个空集。
import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy";
let $uris :=
(
"/Transaction/00000000000101000000/1.xml",
"/Transaction/00000000000101000001/1.xml",
"/Transaction/111111/1.xml"
)
let $query := cts:triple-range-query($uris, "isLatestVersion", fn:true())
return
cts:uris("", (), $query)
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗?
有没有办法找到没有范围索引的元素的频率?该
cts:frequency() 我使用的不支持任何不是词典的元素
我们可以使用java客户端api在marklogic中创建一个新集合吗?因为我希望我的应用程序在启动时创建集合.
我知道我可以使用Querymanager.newDeleteDefinition删除一个集合,然后传入定义选项.
我们正在构建一个以 ML 作为后端数据库的企业应用程序。要求之一是在不同文档中查找 XML 中特定元素的不同值。
我可以使用结构化查询/组合查询获取不同的entity_type吗
以下所有文档都是实体集合的一部分:
文件1
<xml>
<entities>
<entity_name>Imprezza</entity_name>
<entity_type>Car</entity_type>
<entity_color>Red</entity_color>
<entities>
<xml>
Run Code Online (Sandbox Code Playgroud)
文件2
<xml>
<entities>
<entity_name>Ducati</entity_name>
<entity_type>Bike</entity_type>
<entity_color>White</entity_color>
<entities>
<xml>
Run Code Online (Sandbox Code Playgroud)
文件3
<xml>
<entities>
<entity_name>Lancia</entity_name>
<entity_type>Car</entity_type>
<entity_color>Red</entity_color>
<entities>
<xml>
Run Code Online (Sandbox Code Playgroud)
文件4
<xml>
<entities>
<entity_name>Scania</entity_name>
<entity_type>Truck</entity_type>
<entity_color>Black</entity_color>
<entities>
<xml>
Run Code Online (Sandbox Code Playgroud)
要求:给我集合中所有不同的entity_type
结果:汽车、自行车、卡车
PS:需要在Java层获取结果。我们目前有一个 API,可以根据输入生成 MarkLogic 组合查询(结构化查询 + 选项查询)。我可以使用结构化查询/组合查询获取不同的实体吗?
我在MarkLogic DB中有400万个xml文档.我需要将所有XMLS存储在本地文件夹中.
什么是最好和最快的方法?
我正在做一些锻炼以找出性能方面哪个更好,无论是元素值查询还是路径范围查询。
我发现使用路径范围查询的搜索比元素值查询慢一点。
即使加载了额外的路径范围索引,有没有人知道使用路径范围查询搜索的速度缓慢。
我使用了下面的代码。
xdmp:document-delete("/aname4.xml")
xdmp:document-insert("/aname1.xml",
<name><fname>John</fname><mname>Rob</mname><lname>Goldings</lname></name>),
xdmp:document-insert("/aname2.xml",
<name><fname>Jim</fname><mname>Ken</mname><lname>Kurla</lname></name>),
xdmp:document-insert("/aname3.xml",
<name><fname>Ooi</fname><mname>Ben</mname><lname>Fu</lname></name>),
xdmp:document-insert("/aname4.xml",
<name><fname>James</fname><mname>Rick</mname><lname>Tod</lname></name>)
create path range index "/name/fname"
checked response time with following search code
cts:search(doc(),cts:path-range-query("/name/fname","=","Jim"),"filtered")
cts:search(doc(),
cts:element-value-query(xs:QName("fname"),"jim"),
"filtered")
Run Code Online (Sandbox Code Playgroud)
在使用路径范围查询时,我应该考虑哪些特定的事情
任何建议都将受到高度赞赏,因为它有助于我们设计高效的搜索代码。