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