【问题标题】:How to impliment below XQuery using cts:element-values如何使用 cts:element-values 在 XQuery 下实现
【发布时间】:2014-06-01 11:31:22
【问题描述】:

我有以下使用cts:search 的查询,这在生产中运行时需要花费大量时间

xquery version "1.0-ml";
(: let $limit := ()  use this instead to display all values :)
for $uri in cts:uri-match("/tag-cloud/*")
let $values :=""
let $region := fn:substring-before(fn:substring-after($uri, "/tag-cloud/"), ".xml")
let $doc := concat("/tag-cloud/",$region,".xml")
let $distinct-search-text := cts:search(doc($doc)/All-searchtext/searchtext,
               cts:element-attribute-range-query(xs:QName("searchtext"), xs:QName("date"),
               ">=",
              (fn:current-date() - xs:dayTimeDuration("P2D"))
              )


             )

let $result-xml :=  for $each-search-text in fn:distinct-values($distinct-search-text/text())
                let $count := count($distinct-search-text[text() eq $each-search-text]) 
                order by $count descending
                return 
                fn:concat($region,"	", $each-search-text, "	",$count) 


return 
for $eachtag in (($result-xml)[1 to 15])
  return ($eachtag)

谁能帮我用cts:element-values函数重写上面的查询,因为我只需要频率值。

我尝试了以下查询,但过滤无法正常工作。任何帮助都非常感谢

xquery version "1.0-ml";
let $limit := 15
(: let $limit := ()  use this instead to display all values :)
for $uri in cts:uri-match("/tag-cloud/*")
let $region := fn:substring-before(fn:substring-after($uri, "/tag-cloud/"), ".xml")
let $values :=
cts:element-values(
  xs:QName("searchtext"),
  "",
  (
    "collation=http://marklogic.com/collation/codepoint",
    "item-frequency",
    "frequency-order",
    "descending",
    if (fn:exists($limit)) then fn:concat("limit=", $limit) else ()
  ),
 cts:and-query((
   cts:element-attribute-range-query(xs:QName("searchtext"), xs:QName("date"),
               ">=",
              (fn:current-date() - xs:dayTimeDuration("P2D"))
              ),
 cts:document-query($uri)))
 )
 for $value in $values
 return
   fn:concat($region, "	", $value, "	", cts:frequency($value))

谢谢

【问题讨论】:

  • “过滤不正常”是什么意思?
  • 请提供示例标签云xml文档,并说明功能目标..

标签: xml xquery marklogic cts-search


【解决方案1】:

如果您检索带有doc() 的文档,则没有理由进行搜索。您已经拥有该文档。

另一个要点:您应该尝试构建一个单独的搜索请求来执行您想要的操作,而不是迭代和执行多个搜索请求。例如,不要迭代cts:uri-match(),而是考虑是否可以使用cts:directory-query() 子句执行单个cts:search()

对于特别的问题,我不确定我是否理解目标。如果您在 searchtext 上创建范围索引,则可以按如下所述计算频率:

http://docs.marklogic.com/cts:frequency

如果您需要这些频率来反映区域,一种方法是将区域构建到搜索文本值中。

但是,也许我误解了目标。

希望对你有所帮助,

埃里克·亨纳姆

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    相关资源
    最近更新 更多