gpt4 book ai didi

xml - Marklogic/XQuery - 要排序的结果然后限制为最近的

转载 作者:数据小太阳 更新时间:2023-10-29 02:25:34 25 4
gpt4 key购买 nike

在 MarkLogic 中,我尝试了以下代码。但是,我希望有一个程序可以按年、月、日排序,然后限制结果。下面的代码限制了结果,然后按 YY、MM、DD 排序,返回了错误的结果。

xquery version "1.0-ml";

declare variable $query :=
cts:and-query
((
cts:element-word-query(xs:QName("journal-title"),"MyJournal"),
cts:element-word-query(xs:QName("subject"),"MyNews")));

declare function local:do-query(){
element xml {
for $i in cts:uris( (), ("limit=50"), $query)
let $item := doc($i)
order by ($item//pub-date/year) descending, ($item//pub-date/month) descending, ($item//pub-date/day) descending

return
element article {
element journal-title { $item//journal-title },
element sub {$item//article-meta//article-categories//subj-group[@subj-group-type="content-type"]//subject},
element title { $item//article-title },
element byline { $item//contrib/string-name },
element body { $item//body },
element images {
for $graphic in $item//body//graphic
return element image { ($graphic//@*[name()="xlink:href"]/data()) }},
element year {$item//pub-date/year/string()},
element month {$item//pub-date/month/string()},
element day {$item//pub-date/day/string()},
element doi { $item//article-id[@pub-id-type="doi"]/text() },
element doitrim {substring-after($item//article-id[@pub-id-type="doi"]/text(),"/")}
}
}
};

local:do-query()

提前致谢。

最佳答案

您的代码正在选择前 50 个与查询条件匹配的 URI,加载这些文档并对它们进行排序。

听起来好像您想搜索符合查询条件的文档,结果按年、月、日值排序,然后从排序后的集合中选择前 50 个。

您可以使用 cts:search()搜索符合查询条件的文档并使用 cts:index-order() 序列使用 cts:element-reference() 返回按年、月、日排序的结果,然后使用谓词来限制这些排序文档的前 50 个。

xquery version "1.0-ml";
declare variable $query :=
cts:and-query((
cts:element-word-query(xs:QName("journal-title"),"MyJournal"),
cts:element-word-query(xs:QName("subject"),"MyNews")
));

declare function local:do-query() {
element xml {
for $item in cts:search(fn:doc(), $query,
("unfiltered",
(
cts:index-order(cts:element-reference(xs:QName("year")), "descending"),
cts:index-order(cts:element-reference(xs:QName("month")), "descending"),
cts:index-order(cts:element-reference(xs:QName("day")), "descending")
)
)
)[1 to 50]
return
element article {
base-uri(),
element journal-title { $item//journal-title },
element sub {$item//article-meta//article-categories//subj-group[@subj-group-type="content-type"]//subject},
element title { $item//article-title },
element byline { $item//contrib/string-name },
element body { $item//body },
element images {

for $graphic in $item//body//graphic
return element image { ($graphic//@*[name()="xlink:href"]/data()) }},
element year {$item//pub-date/year/string()},
element month {$item//pub-date/month/string()},
element day {$item//pub-date/day/string()},
element doi { $item//article-id[@pub-id-type="doi"]/text() },
element doitrim {substring-after($item//article-id[@pub-id-type="doi"]/text(),"/")}
}
}
};

local:do-query()

关于xml - Marklogic/XQuery - 要排序的结果然后限制为最近的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com