2012-04-18 30 views
3

我的marklogic服务器中有大约53,00,000个文档,每个文档都包含一条记录。Markligic Cts中超出的时间限制:搜索

xquery version "1.0-ml"; 
    declare namespace pa = "http://www.contata.com/pa"; 
    let $query := 
     cts:or-query(( 
      cts:element-word-query( 
       xs:QName("pa:name"), "SMITH" 
      ), 
      cts:element-word-query( 
       xs:QName("pa:address-1"), "" 
      ), 
      cts:element-word-query( 
       xs:QName("pa:address-2"), "" 
      ), 
      cts:element-word-query( 
       xs:QName("pa:address-3"), "" 
      ), 
      cts:element-word-query( 
       xs:QName("pa:city"), "" 
      ) 
        )) return 

cts:search(fn:doc(),$query)[5100000 to 5300000] 

当我执行上述查询它需要长的时间来执行,并提供了以下错误

[1.0毫升] XDMP-EXTIME:CTS:搜索(FN:DOC(),CTS: (cts:element-word-query(xs:QName(“pa:name”),“SMITH”,(“lang = en”),1),cts:element-word-query(xs:QName (“pa:address-1”),“”,(“lang = en”),1),cts:element-word-query(xs:QName(“pa:address-2”),“”, lang = en“),1),...))) - 超出时间限制

但是当我执行cts:search(fn:doc(),$query)[1000 to 2000]它会成功执行。

还有一个问题,如果我已经加载了所有文档,那么在从RecordLoader Utility加载后如何在它们上创建索引。

回答

1

您在展示200.000个搜索结果。尽量少显示一次。如果你使用查询控制台或CQ分析器,你会发现不是cts:search花费了很多时间,而是获得了那些200k的文档。

HTH!

+0

感谢您的回复, 当我运行这个查询时,它也给出了同样的错误,但现在我试图只得到10条记录。搜索(fn:doc(),$ query)[5300000至5300010]' – 2012-04-18 08:20:32

4

看看“未过滤”选项,并考虑使用“搜索:搜索”。

你也可以增加时间限制,但可能不会想要。通过筛选搜索获得第500000个结果,需要检查500000个文档,这可能需要多达500000个磁盘读取。如果你的磁盘每秒可以管理100个,那就是5000秒。