标签: marklogic

如何使用Ubuntu中的cURL将XQuery代码发布到MarkLogic?

我正在使用Ubuntu机器.我正在使用curl命令进行POST调用,并以字符串格式将xquery代码作为--data 发送.作为回应我得到以下错误:

xdmp:database()HTTP/1.1 500 REST-UNSUPPORTEDPARAM: (rest:UNSUPPORTEDPARAM) Endpoint does not support query parameter: xdmp:database()
Run Code Online (Sandbox Code Playgroud)

下面是完整的curl命令

curl -v --digest -u username --request POST "http://host:port/qconsole/endpoints/evaler.xqy?dbid=someid&querytype=xquery&action=eval" --data "xdmp:database()"
Run Code Online (Sandbox Code Playgroud)

在上面的命令基本上我试图在目标机器上运行xquery代码(主机:端口/端点/ evaler.xqy)

这是传递xquery代码的正确方法吗?

更新:

我正在使用ML 7

传递头文件后,我能够运行XQuery代码,但又面临一个问题.

当我传递"xdmp:database()"作为数据它工作正常(参见下面的命令),在响应中我得到数据库ID.

 curl -v --digest -uusername --data "xdmp:database()" --header "Content-type:text/x-www-form-urlencoded" --header "Accept: multipart/mixed; boundary=BOUNDARY" --request POST "http://host:port/qconsole/endpoints/evaler.xqy?dbid=dbid&querytype=xquery&action=eval"
Run Code Online (Sandbox Code Playgroud)

当我尝试传递"let $ x:= 10 return $ x"作为数据时(如下面的命令所示)我得到了

x:未定义的变量

甚至不要求密码!!

 curl -v --digest -u username --data "let $x := 10 return $x" --header "Content-type:text/x-www-form-urlencoded" --header "Accept: multipart/mixed; boundary=BOUNDARY" --request POST …
Run Code Online (Sandbox Code Playgroud)

ubuntu curl xquery marklogic

2
推荐指数
1
解决办法
759
查看次数

Marklogic - 我想在json文档的数组部分中使用带有键值的java api进行元素搜索

我想从文档的数组元素部分搜索具有键值的元素.让我说我有json看起来像 -

{ 
   "name":"abc", 
   "lastName":"xyz", 
   "description":"aaaaa aaaa", 
   "dob":11-10-1988,
   "workInformation":[
       {
          "address":"kolkata", 
          "workFor":"vvv Pvt Ltd"
       },
        {
          "address":"bangalore", 
          "workFor":"www Pvt Ltd"
       }
    ]
}
Run Code Online (Sandbox Code Playgroud)

假设我想在数组属性workInformation中使用java api搜索下面提到的键和值 -

key - workFor,value - vvv私人有限公司

请让我知道,怎么做.

谢谢阅读.

marklogic marklogic-8

2
推荐指数
1
解决办法
149
查看次数

不区分大小写,未过滤的搜索在 MarkLogic 中返回错误结果

似乎存在unfilteredcase-sensitive搜索相关的问题。

我正在运行element-value-querywithcase-sensitive选项。

ctsunfiltered搜索返回了错误的结果。

以下代码片段表现出错误的行为。

情况1:

xdmp:document-insert('/a.xml', <a><name>Dixit</name></a>);

cts:search(
  doc('/a.xml'),
  cts:element-value-query(xs:QName('name'), 'dixit','case-sensitive'),
  'unfiltered'
);
Run Code Online (Sandbox Code Playgroud)

输出:返回插入的 xml

预期:它不应该返回

这里我认为在索引中,键Dixit等于“dixit”,因此返回 XML。

所以我尝试了以下一种但没有收获。

案例2:

xdmp:document-insert('/a.xml', <a><name>Dixit singla</name></a>);

cts:search(
  doc('/a.xml'),
  cts:element-value-query(xs:QName('name'), 'dixit singla','case-sensitive'),
  'unfiltered'
);
Run Code Online (Sandbox Code Playgroud)

输出:返回插入的xml

预期:它不应该返回

这是 MarkLogic 中的错误还是这是预期的行为。我很想知道原因。

注意: fast case sensitive searches &fast diacritic sensitive searches两个索引都设置为true

xml marklogic

2
推荐指数
1
解决办法
108
查看次数

MarkLogic 9 cts.parse没有正确解析查询

我正在使用MarkLogic 9开发基于Web的搜索应用程序.我有一个查询构建接口,允许用户将字符串输入到与db中文档的特定JSON属性相对应的文本框中.这个想法是用户可以输入搜索条件,就像cts.parse(我使用服务器端javascript,而不是XQuery)所期望的那样,因此他们的搜索可能是任意复杂的,我不必处理自己解析查询.然而,经过一些测试,我发现了一个关于在布尔逻辑中使用括号的奇怪现象.也就是说,当你在括号中添加像cat和(dog OR bird)这样的语句时,cts.parse会将OR误认为是搜索词.

我将从我的网站提供一个实际的例子:

我构造了一个绑定对象来将查询绑定到我的文档的元素,

var qOpts = ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded"];


var bindings = {
	main: function(operator, values, options){
		return(
				cts.orQuery([
					cts.jsonPropertyWordQuery('title',values,qOpts),
					cts.jsonPropertyWordQuery('abstract',values,qOpts),
					cts.jsonPropertyWordQuery('meshterms',values,qOpts),
					])
		);
	},	
}
Run Code Online (Sandbox Code Playgroud)

我的服务器端脚本调用,例如,

cts.parse('main:'+params.mainQuery,bind)
Run Code Online (Sandbox Code Playgroud)

以下是输入的字符串和返回的查询的一些示例:

  1. 脑或心脏或肺

cts.orQuery([cts.jsonPropertyWordQuery("title", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.jsonPropertyWordQuery("abstract", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.jsonPropertyWordQuery("meshterms", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.wordQuery("heart", ["lang=en"], 1), cts.wordQuery("lung", ["lang=en"], 1)], [])
Run Code Online (Sandbox Code Playgroud)

这个适当地为"大脑"术语的3个字段(标题,摘要,网格术语)生成jsonPropertyWordQuery,但是对于其他两个术语不能这样做,它只是生成一个cts.wordQuery().

  1. 大脑或心肺

cts.orQuery([cts.jsonPropertyWordQuery("title", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.jsonPropertyWordQuery("abstract", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.jsonPropertyWordQuery("meshterms", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.andQuery([cts.wordQuery("heart", ["lang=en"], 1), cts.wordQuery("lung", ["lang=en"], 1)], ["unordered"])], [])
Run Code Online (Sandbox Code Playgroud)

  1. 大脑OR(心肺)

cts.orQuery([cts.jsonPropertyWordQuery("title", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.jsonPropertyWordQuery("abstract", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], …
Run Code Online (Sandbox Code Playgroud)

javascript marklogic marklogic-9

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

XQuery 如果在输入处理期间发生错误,则出现意外情况

我正在尝试设计一个利用 MarkLogic 查询控制台和 MarkLogic 数据库的简单应用程序。

我的代码如下所示:

declare namespace link="http://www.xbrl.org/2003/linkbase";
declare namespace bd-alg="http://www.nltaxonomie.nl/nt11/bd/20161207/dictionary/bd-algemeen";
declare namespace bd-bedr="http://www.nltaxonomie.nl/nt11/bd/20161207/dictionary/bd-bedrijven";
declare namespace bd-bedr-tuple="http://www.nltaxonomie.nl/nt11/bd/20161207/dictionary/bd-bedr-tuples";
declare namespace bd-dim-mem="http://www.nltaxonomie.nl/nt11/bd/20161207/dictionary/bd-domain-members";
declare namespace bd-dim-dim="http://www.nltaxonomie.nl/nt11/bd/20161207/validation/bd-axes";
declare namespace xbrldi="http://xbrl.org/2006/xbrldi";
declare namespace xbrli="http://www.xbrl.org/2003/instance";
declare namespace iso4217="http://www.xbrl.org/2003/iso4217";
declare namespace xlink="http://www.w3.org/1999/xlink";

let $startDateInput := ""
let $endDateInput := ""

if($startDateInput)
  {
    then let $startDate := xs:date($startDateInput)
    else let $startDate := xs:date("1900-01-01")
  }
  
if($endDateInput)
  {
    then let $endDate := xs:date($endDateInput)
    else let $endDate := xs:date("2100-12-31")
  }
    
for $doc in /xbrli:xbrl
    let $docId := $doc/xbrli:context//xbrli:identifier/text()
    let $docStartDate …
Run Code Online (Sandbox Code Playgroud)

xml xquery marklogic

2
推荐指数
1
解决办法
470
查看次数

仅通过传递部分节点名称获取子节点的XPath

我在MarkLogic中有以下XML存储,

<testDoc>
    <test>
        <test1>test1</test1>
        <test2>test2</test2>
        <test3>test3</test3>
    </test>
</testDoc>
Run Code Online (Sandbox Code Playgroud)

我的要求是只获得子节点的xpath,如果我将测试(部分节点名称)传递给我的xquery然后我期待

/testDoc/test/test1
/testDoc/test/test2
/testDoc/test/test3
Run Code Online (Sandbox Code Playgroud)

但是我的xquery回来了,

/testDoc
/testDoc/test
/testDoc/test/test1
/testDoc/test/test2
/testDoc/test/test3
Run Code Online (Sandbox Code Playgroud)

我在qconsole上执行的XQuery是,

 xquery version "1.0-ml";
 let $xml := document { fn:doc("/test/testDoc")}
 let $elem-name := "test"
 let $elems := $xml//*[local-name()[contains(lower-case(.), lower-case($elem-name))]]
 return $elems ! xdmp:path(.)
Run Code Online (Sandbox Code Playgroud)

请指导我达到我的要求.

marklogic marklogic-8

2
推荐指数
1
解决办法
49
查看次数

对大量文档执行 XQuery 时出现扩展树缓存已满异常

我正在尝试从多个文档中检索 XPath 的值。就我而言,大约有 80 万个文档。我收到异常消息

扩展树缓存已满。

当文档较少(即 400k 文档)时,相同的查询会产生预期的输出。

以下是用于从集合中检索 XPath 值的查询:collection1collection2

cts:search(doc(),
  cts:and-query((
    cts:collection-query("collection1"), 
    cts:collection-query("collection2")
  ))
)/xpath/text()
Run Code Online (Sandbox Code Playgroud)

xquery marklogic

2
推荐指数
1
解决办法
161
查看次数

如何在查询控制台标记逻辑中设置集合

我是标记逻辑的新手。我想在查询控制台中创建一个带有集合的 json 文件。怎么做?我已经在名为“Test”的 marklogic 服务器中创建了一个数据库。而且我还插入了没有集合的 serval json 文件。如何使用 XQuery 或其他方法设置集合?

marklogic

2
推荐指数
1
解决办法
63
查看次数

按顺序阅读文档

我们有一个 URI 列表,我们需要按照传递的顺序读取这些 URI。

示例 1

doc(("/doc1", "/doc2", "/doc3"))
Run Code Online (Sandbox Code Playgroud)

上面的函数应该返回“/doc1”的内容,然后是“/doc2”,然后是“/doc3”,但它没有发生。

下面的查询也发生了同样的事情。

例2

cts:search(doc(), cts:document-query((("/doc1"),("/doc2"),("/doc3"))))
Run Code Online (Sandbox Code Playgroud)

如果我想以传递 URI 的顺序阅读文档,有什么解决方案?

任何帮助表示赞赏..!

xquery marklogic marklogic-10

2
推荐指数
1
解决办法
51
查看次数

从标记逻辑中删除用户

我有一组用户名,他们将从 marklogic 数据库中删除。列表中的某些用户可能存在也可能不存在于数据库中。我尝试使用以下脚本,但在找不到用户时失败。如何在未找到用户时让脚本运行而不停止,即继续删除下一个用户,而不是出错并停止脚本执行。请帮忙。

xquery version "1.0-ml";
import module namespace sec = "http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";
declare variable $USERS := ("user1","user2","user3");
for $user in $USERS
     return $user||'-'||fn:empty((sec:remove-user($user)));
Run Code Online (Sandbox Code Playgroud)

下面是错误

[1.0-ml] SEC-USERDNE: (err:FOER0000) User does not exist: sec:user-name = user1
Stack Trace
In /MarkLogic/security.xqy on line 3612
In get-element("http://marklogic.com/xdmp/security", "sec:user", "sec:user-name", "user1", "SEC-USERDNE")
$col := "http://marklogic.com/xdmp/security"
$elem := "sec:user"
$filter := "sec:user-name"
$value := "user1"
$function-error := "SEC-USERDNE"
$filterValue := <sec:user-name xmlns:sec="http://marklogic.com/xdmp/security">user1</sec:user-name>
$outElem := ()
Run Code Online (Sandbox Code Playgroud)

xquery marklogic

2
推荐指数
1
解决办法
36
查看次数