3

我的 marklogic 服务器中有大约 53,00,000 个文档,每个文档包含一条记录。

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-ml] XDMP-EXTIME: cts:search(fn:doc(), cts:or-query((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 加载后如何在它们上创建索引。

4

2 回答 2

4

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

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

于 2012-04-18T15:23:38.150 回答
1

您正在显示 200.000 个搜索结果。尝试一次少显示。如果您使用查询控制台或 CQ 分析器,您会看到不是 cts:search 花费了这么多时间,而是获得了那些 200k 文档。

于 2012-04-18T07:50:07.190 回答