标签: marklogic-9

没有锁时会收到XDMP-LOCKED错误

我有一个函数,我写了一个序列号的生成.功能如下:

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)

xquery marklogic marklogic-9

6
推荐指数
1
解决办法
85
查看次数

无法找到xdmp:plan结果文档

我很难找到有关输出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:keyqry:annotation真正含义的细节.

有没有我缺少的文件描述可能的输出xdmp:plan.由于这是一个非常有价值的工具,以便了解查询性能,我希望它有很好的文档记录.


编辑:我发现的这个marklogic博客文章给出了一些如何解释查询计划的例子.

不过,我觉得自己像一个博客帖子应该不会唯一合理的文档,这个工具.

我仍在思考一些问题:

  • 什么是a 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 marklogic-9

6
推荐指数
1
解决办法
104
查看次数

MarkLogic Java API死锁检测

我们的一个应用程序刚刚遇到了一些令人讨厌的死锁.我很难重新创建问题,因为死锁(或堆栈跟踪)没有立即出现在我的java应用程序日志中.

令我惊讶的是,marklogic java api重试失败的请求(例如,由于死锁).如果您的请求不是多语句请求,这可能是有意义的,否则我不确定它是否确实如此.

因此,请坚持这个死锁问题.我创建了一个简单的代码片段,其中我故意创建了一个死锁.该片段创建一个文档test.xml,然后尝试从两个不同的事务中读取和写入,每个事务都在一个新线程上.

public static void main(String[] args) throws Exception {
        final Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
        final Logger ok = (Logger) LoggerFactory.getLogger(OkHttpServices.class);
        root.setLevel(Level.ALL);
        ok.setLevel(Level.ALL);

        final DatabaseClient client = DatabaseClientFactory.newClient("localhost", 8000, new DatabaseClientFactory.DigestAuthContext("username", "password"));

        final StringHandle handle = new StringHandle("<doc><name>Test</name></doc>")
            .withFormat(Format.XML);
        client.newTextDocumentManager().write("test.xml", handle);

        root.info("t1: opening");
        final Transaction t1 = client.openTransaction();
        root.info("t1: reading");
        client.newXMLDocumentManager()
            .read("test.xml", new StringHandle(), t1);

        root.info("t2: opening");
        final Transaction t2 = client.openTransaction();
        root.info("t2: reading");
        client.newXMLDocumentManager()
            .read("test.xml", new StringHandle(), t2);

        new Thread(() -> …
Run Code Online (Sandbox Code Playgroud)

java marklogic marklogic-9

6
推荐指数
1
解决办法
191
查看次数

XQuery 中的运算符“=&gt;”有什么作用?

当我查找 XQuery 示例时,有时会看到使用的运算符=>

我试图寻找它的含义,但找不到任何东西。由于我使用的是 MarkLogic,因此它可能仅适用于 MarkLogic,但我对此表示怀疑。

从示例中我知道它以某种方式将功能链接在一起,但我想知道发生了什么。

这些是我发现的一些例子:

let $map := map:map()
  =>map:with("some-key",<info>45683</info>)
return <result>{$map}</result>
Run Code Online (Sandbox Code Playgroud)
let $employees := op:from-view("main", "employees")
let $expenses  := op:from-view("main", "expenses")
let $totalexpenses  := op:col("totalexpenses")
return $employees
   => op:join-inner($expenses, op:on(
                    op:view-col("employees", "EmployeeID"),
                    op:view-col("expenses", "EmployeeID")))
   => op:group-by(op:view-col("employees", "EmployeeID"),
                 ("FirstName", "LastName", 
                  op:view-col("expenses", "Category"),
                  op:sum($totalexpenses, 
                  op:view-col("expenses", "Amount"))))
   => op:order-by(op:view-col("employees", "EmployeeID")) 
   => op:result() 
Run Code Online (Sandbox Code Playgroud)

xquery marklogic marklogic-9

6
推荐指数
1
解决办法
131
查看次数

MarkLogic sql S1排序规则显示错误的值

让我们有一个相当简单的TDE架构:

<tde:template xmlns:tde='http://marklogic.com/xdmp/tde'>
  <tde:description>testing a TDE view</tde:description>
  <tde:context>/test</tde:context>
  <tde:enabled>true</tde:enabled>
  <tde:rows>
    <tde:row>
      <tde:schema-name>sitefusion</tde:schema-name>
      <tde:view-name>test</tde:view-name>
      <tde:columns>
        <tde:column>
          <tde:name>name</tde:name>
          <tde:scalar-type>string</tde:scalar-type>
          <tde:val>name</tde:val>
          <tde:nullable>false</tde:nullable>
          <tde:collation>http://marklogic.com/collation/en/S1</tde:collation>
        </tde:column>
      </tde:columns>
    </tde:row>
  </tde:rows>
</tde:template>
Run Code Online (Sandbox Code Playgroud)

此架构具有整理http://marklogic.com/collation/en/S1含义case and diacritic insensitive.考虑到这一点,我插入了一个带有第一个char大写名称的测试文档Test:

let $doc := 
<test>
  <name>Test</name>
</test>
return xdmp:document-insert("/test/1.xml", $doc);

let $data := xdmp:sql("select name from test")

return json:array-pop($data)[2];
Run Code Online (Sandbox Code Playgroud)

该xquery的输出是name的预期值Test.

现在让我们更新nametest在其中放入一个小写:

let $doc := 
<test>
  <name>test</name>
</test>
return xdmp:document-insert("/test/1.xml", $doc);

let $data := xdmp:sql("select name from test")

return (
   json:array-pop($data)[2], …
Run Code Online (Sandbox Code Playgroud)

marklogic marklogic-9

4
推荐指数
1
解决办法
176
查看次数

cts:element-query vs cts:path-range-query 性能

我们正在开发一个存储大量数据的企业应用程序。在我们的应用程序中,我们强制用户创建多个路径范围索引以加快搜索速度。

早些时候,我们利用路径范围索引来使用cts:path-range-query()加快搜索速度,但现在我发现使用cts:element-query()可以获得相同的结果,而无需创建路径范围索引。

例如 -

  1. 使用cts:path-range-query() -> 这里我需要为 /tXML/Message/INVENTORY/ASNId 创建路径范围索引

    xquery version "1.0-ml"; cts:uris('', (), cts:and-query((cts:collection-query("integration"), cts:path-range-query("/tXML/Message/INVENTORY/ASNId", "=", "10121600"))))

  2. 使用cts:element-query() -> 这里我不需要创建路径范围索引。

    xquery version "1.0-ml"; cts:uris('', (), cts:and-query((cts:collection-query("integration"), cts:element-query(xs:QName("tXML"),cts:element-query(xs:QName("Message"), cts:element-query(xs:QName("INVENTORY"), cts:element-value-query(xs:QName("ASNId"), "10121600")))))))

我的问题是,

  1. 如果我使用 cts:element-query() 得到与 cts:path-range-query() 相同的结果,那么为什么我需要强制用户创建路径范围索引?。

  2. 哪个查询适合大量数据?.(cts:element-query()cts:path-range-query()

请帮我找到这两个问题的答案。

marklogic marklogic-9

4
推荐指数
1
解决办法
184
查看次数

cts:values 函数不返回路径引用的所有值

假设我在 MarkLogic 中有三个文档,如下所示,

 <employee>
    <name>a</name>
    <age>10</age>
</employee>

<employee>
    <name>b</name>
    <age>10</age>
</employee>

<employee>
    <name>c</name>
    <age>10</age>
</employee>
Run Code Online (Sandbox Code Playgroud)

文件 uris - /employee/a, /employee/b, /employee/c分别。我已经为"/employee/age"作为int标量 stype创建了路径范围索引。

我的要求是 - 获取路径范围索引的所有值的总和"/employee/age"

我试过-sum(cts:values(cts:path-reference("/employee/age")))在这里返回 10 作为输出总和我期待 30 作为输出总和

上述问题的解决方案是什么?

marklogic marklogic-9

4
推荐指数
1
解决办法
42
查看次数

在marklogic中搜索二进制文件

除了搜索 PPT、PDF 等二进制文件的内容之外,还有其他方法吗?

使用 xdmp:document-filter() 函数将其转换为 X HTML 格式并进行搜索?

marklogic marklogic-9

3
推荐指数
1
解决办法
174
查看次数

如何将 fn:starts-with() 和 fn:ends-with() 与 cts:uris() 一起使用

我的要求是,仅当路径范围索引值以某个单词开头或结尾时,我才想返回文档 URI。

根据 MarkLogic 文档,我只能使用 ">、<、<=、>=、=、!=" 来比较路径范围索引值,但在我的要求中,我想使用 fn:starts-with() 或 fn:ends-和()。

有什么办法可以满足这个要求吗?

marklogic marklogic-9

3
推荐指数
1
解决办法
88
查看次数

如何找出导致集群重启的错误查询?

如何从查询控制台找到可能的查询?

我知道时间段。

它在历史仪表板中不像在历史仪表板中那样可用。我只能看到过去 10 分钟的长时间运行的查询。

也许如果我能获得正确的 URI 来探索应用程序服务或计量数据?

marklogic marklogic-9

3
推荐指数
1
解决办法
46
查看次数

标签 统计

marklogic ×10

marklogic-9 ×10

xquery ×2

java ×1