Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MarkLogic:当load_date没有范围索引时,根据load_date筛选文档_Marklogic_Marklogic 9 - Fatal编程技术网

MarkLogic:当load_date没有范围索引时,根据load_date筛选文档

MarkLogic:当load_date没有范围索引时,根据load_date筛选文档,marklogic,marklogic-9,Marklogic,Marklogic 9,我无法根据加载日期筛选文档。我想对指定日期之前/之后加载的文档进行计数。我在数据库里有大约2200万份文件。我无法使用cts:element范围查询,因为开发人员尚未在“loaddate”元素上创建范围索引。这阻止了我从测试角度验证加载的内容 请帮我选择 问候,, Hari选项1是让开发人员在加载日期创建范围索引——这是解决这个确切问题的预期方法,应该是首选解决方案 如果您不能这样做(可能这是一个一次性查询,因此添加索引会遇到阻力),但是日期采用了正确的YYYY-MM-DD格式,那么您可以进行字

我无法根据加载日期筛选文档。我想对指定日期之前/之后加载的文档进行计数。我在数据库里有大约2200万份文件。我无法使用cts:element范围查询,因为开发人员尚未在“loaddate”元素上创建范围索引。这阻止了我从测试角度验证加载的内容

请帮我选择

问候,,
Hari

选项1是让开发人员在加载日期创建范围索引——这是解决这个确切问题的预期方法,应该是首选解决方案

如果您不能这样做(可能这是一个一次性查询,因此添加索引会遇到阻力),但是日期采用了正确的YYYY-MM-DD格式,那么您可以进行字符串比较

fn:count(
  for $item in fn:doc()
  where $item/load_date/fn:string() gt "2015-01-01"
  return $item
)
有2200万份文档,这可能行不通。您可能会遇到超时或扩展树缓存已满错误。如果它确实起作用,则预期此查询会对系统的繁忙程度产生影响。问题是,您的工作没有排序索引,因此需要查看每个文档。如果可能的话,选项1绝对是正确的选择

您可以运行,它可以使用可配置的线程数来处理这一大组文档,以便为每个文档URI执行一个处理模块,以确定加载日期是否在指定日期之前/之后

CORB作业可以为具有
加载日期
元素的文档(或文档要评估的任何标准)选择一批2200万个URI,然后评估
加载日期
元素是否具有一个应在为每个文档URI执行的处理模块中计算的值。如果应该对文档进行计数,则返回一个值(为了保持文件大小较小,即使只有数字
1
也足够。将批处理后任务选项配置为使用com.marklogic.developer.corb.PostBatchUpdateFileTask,以便将所有这些值写入单个文件

然后,当CORB作业完成时,您可以计算输出文件中的行数:

wc -l load-date-count.txt
例如:

示例uris.xqy模块:

xquery version "1.0-ml";
let $uris := cts:uris("", (), 
               cts:element-query(xs:QName("load-date"), cts:true-query() ) )
return
  (count($uris), $uris)
xquery version "1.0-ml";
declare variable $URI as xs:string? external;
if (fn:doc($URI)/*/load-date/xs:date(.) gt xs:date("2017-09-26")) then 1 
else ()
process.xqy模块示例:

xquery version "1.0-ml";
let $uris := cts:uris("", (), 
               cts:element-query(xs:QName("load-date"), cts:true-query() ) )
return
  (count($uris), $uris)
xquery version "1.0-ml";
declare variable $URI as xs:string? external;
if (fn:doc($URI)/*/load-date/xs:date(.) gt xs:date("2017-09-26")) then 1 
else ()

谢谢Dave和Hansen。我可以通过Xdmp:estimate、cts:directory query和XS:datetime实现