Xquery 如何获取已注册查询的分数

Xquery 如何获取已注册查询的分数,xquery,server-side,marklogic,Xquery,Server Side,Marklogic,我正在尝试为复杂的匹配查询计算分数。 例如: if conditionA and conditionB and (conditionC or conditionD) then score = 10 else score = 0 这就是我提出的解决方案: let $idReq := cts:register( cts:and-query(( cts:path-range-query("/person/name", "=", 'val1', ("score-function=linea

我正在尝试为复杂的匹配查询计算分数。 例如:

if conditionA and conditionB and (conditionC or conditionD) 
then score = 10
else score = 0
这就是我提出的解决方案:

let $idReq := cts:register(
  cts:and-query((
   cts:path-range-query("/person/name", "=", 'val1', ("score-function=linear", "collation=http://marklogic.com/collation//S1")),
   cts:path-range-query("/person/country", "=", 'country', ("score-function=linear", "collation=http://marklogic.com/collation//S1")),
   cts:or-query((
     cts:path-range-query("/person/city", "=", 'city', ("score-function=linear", "collation=http://marklogic.com/collation//S1")),
     cts:path-range-query("/person/school", "=", '', ("score-function=linear", "collation=http://marklogic.com/collation//S1"))
   ))
 ))
)
return
  cts:score(cts:search(fn:doc(), cts:registered-query($idReq, ("unfiltered"), 10)))
所有索引都存在,排序规则也存在

当我执行这个注册查询时,我的分数总是为0

已编辑

我已经缩小了问题的范围,可以通过将cts:register与cts:path-range查询相结合来重现这个问题

let $query := cts:path-range-query("/person/name", "=", "val1", ("score-function=linear", "collation=http://marklogic.com/collation//S1"))
let $idReq := cts:register($query)
return 
  cts:score(
    cts:search(fn:doc(), 
      cts:registered-query($idReq,("unfiltered"), 10)
      (: $query :)
    )
  )
已编辑

用于测试的设置索引配置:

import module namespace admin = "http://marklogic.com/xdmp/admin" at "/MarkLogic/admin.xqy";

let $dbid := xdmp:database("Documents")
let $config := 
  admin:database-add-range-path-index(
    admin:get-configuration(), $dbid, 
    admin:database-range-path-index(
      $dbid, "string", "/person/name",
      "http://marklogic.com/collation//S1",
      fn:false(), "ignore"))
return admin:save-configuration($config)
样本数据:

xdmp:document-insert(
  '/test/person1.xml',
  <person>
    <name>val1</name>
    <city>city</city>
    <country>country</country>
  </person>
)
xdmp:文档插入(
“/test/person1.xml”,
瓦尔1
城市
国家
)

我在一个有一些匹配结果的数据库中运行了您的示例代码(经过一些小的语法修复),得到了一组非零响应。看起来你已经简化了你的原始版本。你有对应结果数量的零列表吗?是的,我有对应结果数量的零列表。也许是关于数据库配置的问题?我想我简化了太多的查询,我将编辑我的第一篇文章。不确定发生了什么。表示如果您添加了评分选项,范围查询(包括路径)可能会有所帮助,您已经这样做了。我会四处询问。添加了示例配置和数据,以便于其他人进行测试。我在一个数据库中运行了您的示例代码(在进行了一些小的语法修复之后),该数据库有一些匹配的结果,我得到了一组非零响应。看起来你已经简化了你的原始版本。你有对应结果数量的零列表吗?是的,我有对应结果数量的零列表。也许是关于数据库配置的问题?我想我简化了太多的查询,我将编辑我的第一篇文章。不确定发生了什么。表示如果您添加了评分选项,范围查询(包括路径)可能会有所帮助,您已经这样做了。我会四处询问。添加了示例配置和数据,以便于其他人进行测试。