2
我想用MarkLogic 9使用服务器端Javascript实现一个简单的群集应用程序。我有一个已经在JS中实现的非常复杂的自定义查询生成器,所以我宁愿在.sjs文件中执行它。MarkLogic 9群集 - 使用SJS限制到某些字段
我的问题是,我不知道如何限制聚类搜索只看文档的几个属性(即“标题”和“抽象”)。没有一个房产有孩子。我试着按照莎士比亚戏剧演示,但它在XQuery中实现。
我目前的实现是一个.xqy文件,它使用xdmp:javascript-eval来使用我的js查询构建器。这个工程,并成功地利用返回查询的结果:
$qry-results := xdmp:javascript-eval(cts.search(someQueryVariable).toArray())
我认为这个问题是在我有点自莎士比亚例如复制我的XQuery代码,但我一直在这几个小时,我不能让它工作。这里是我的XQuery作为目前的情况是:
declare namespace db="http://marklogic.com/xdmp/database" ;
declare namespace cl="cts:cluster" ;
declare namespace dt="cts:distinctive-terms" ;
let $options-node :=
<options xmlns="cts:cluster" >
<overlapping>false</overlapping>
<label-max-terms>1</label-max-terms>
<label-ignore-words>a of the when s as</label-ignore-words>
<max-clusters>10</max-clusters>
<!-- turn all database-level indexing options OFF - only use field terms -->
<db:word-searches>false</db:word-searches>
<db:stemmed-searches>false</db:stemmed-searches>
<db:fast-case-sensitive-searches>false</db:fast-case-sensitive-searches>
<db:fast-diacritic-sensitive-searches>false</db:fast-diacritic-sensitive-searches>
<db:fast-phrase-searches>false</db:fast-phrase-searches>
<db:phrase-throughs/>
<db:phrase-arounds/>
<db:fast-element-word-searches>false</db:fast-element-word-searches>
<db:fast-element-phrase-searches>false</db:fast-element-phrase-searches>
<db:element-word-query-throughs/>
<db:fast-element-character-searches>false</db:fast-element-character-searches>
<db:range-element-indexes/>
<db:range-element-attribute-indexes/>
<db:one-character-searches>false</db:one-character-searches>
<db:two-character-searches>false</db:two-character-searches>
<db:three-character-searches>false</db:three-character-searches>
<db:trailing-wildcard-searches>false</db:trailing-wildcard-searches>
<db:fast-element-trailing-wildcard-searches>false</db:fast-element-trailing-wildcard-searches>
<db:fields>
<field>
<field-name>abstract</field-name>
<include-root>true</include-root>
<stemmed-searches>advanced</stemmed-searches>
<db:fast-phrase-searches>true</db:fast-phrase-searches>
</field>
<field>
<field-name>title</field-name>
<include-root>true</include-root>
<stemmed-searches>advanced</stemmed-searches>
<db:fast-phrase-searches>true</db:fast-phrase-searches>
</field>
<field>
<field-name>institution</field-name>
<include-root>false</include-root>
<stemmed-searches>advanced</stemmed-searches>
<db:fast-phrase-searches>false</db:fast-phrase-searches>
</field>
<field>
<field-name>researcher</field-name>
<include-root>false</include-root>
<stemmed-searches>advanced</stemmed-searches>
<db:fast-phrase-searches>false</db:fast-phrase-searches>
</field>
</db:fields>
</options>
let $res := cts:cluster($qry-results, $options-node)/cts:cluster
return $res
而且,我得到的最常见的错误是这样的:
XDMP-ARGTYPE: (err:XPTY0004) cts:cluster(json:array(<json:array xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" .../>...XDMP-CHILDNODEKIND: element nodes cannot have object node children...), <options xmlns="cts:cluster"><overlapping>false</overlapping><label-max-terms>...</label-max-terms>...</options>) -- arg1 is not of type node()*
in /cluster.xqy, at 113:12 [1.0-ml]
$qry-results = json:array(<json:array xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" .../>...XDMP-CHILDNODEKIND: element nodes cannot have object node children...)
$options-node = <options xmlns="cts:cluster"><overlapping>false</overlapping><label-max-terms>...</label-max-terms>...</options>
我相信,这是愚蠢的东西,但我不与经验XQuery,所以我无法理解它,我现在只是将我的头靠在墙上。
你有没有考虑在你的js-eval中返回someQueryVariable,并在xqy中运行cts:search? – grtjn