MarkLogic执行位置查询的特定方式(或更快的方式)?
我有下面的查询可以运行,但速度非常慢,因为我想它必须查看每个文档,而不是使用索引:MarkLogic执行位置查询的特定方式(或更快的方式)?,marklogic,Marklogic,我有下面的查询可以运行,但速度非常慢,因为我想它必须查看每个文档,而不是使用索引: xquery version "1.0-ml"; declare namespace appl="http://ap.org/schemas/03/2005/appl"; declare namespace appls="http://ap.org/schemas/09/2011/applsearch"; let $p := cts:and-query(( cts:element-range-
xquery version "1.0-ml";
declare namespace appl="http://ap.org/schemas/03/2005/appl";
declare namespace appls="http://ap.org/schemas/09/2011/applsearch";
let $p := cts:and-query((
cts:element-range- query(xs:QName("appls:ArrivalDateTime"),">=",fn:dateTime(xs:date("2003-01-01"), xs:time("00:00:00"))),
cts:element-range-query(xs:QName("appls:ArrivalDateTime"),"<=",fn:dateTime(xs:date("2003-01-31"), xs:time("23:59:59"))),
cts:element-value-query(xs:QName("appl:MediaType"), "text")
))
let $results := cts:search(fn:doc(), $p, "unfiltered")
return
for $result in $results
where cts:contains($result//appl:block/appl:p[position()=last()], "information from:")
return fn:document-uri($result)
xquery版本“1.0-ml”;
声明命名空间appl=”http://ap.org/schemas/03/2005/appl";
声明命名空间appls=”http://ap.org/schemas/09/2011/applsearch";
设$p:=cts:和查询((
cts:元素范围-查询(xs:QName(“appls:ArrivalDateTime”),“>=”,fn:dateTime(xs:date(“2003-01-01”),xs:time(“00:00:00”),
cts:element range query(xs:QName(“appls:ArrivalDateTime”),“我认为实际上没有包含单个元素位置的索引。恐怕最好的解决方案是复制appl:p[position()=last()]
元素并给它一个唯一的名称,这样您就可以直接使用cts:element value query
如果where子句过滤掉大量的误报,并且如果这些情况根本不包含值为“information from:”的appl:p
,那么使用cts:element单词查询
可能会有很大帮助
使用元素词查询
不一定需要索引
HTH!我不认为确实存在包含单个元素位置的索引。恐怕最好的解决方案是复制appl:p[position()=last()]
元素并给它一个唯一的名称,这样就可以直接使用cts:element-value-query
如果where子句过滤掉大量的误报,并且如果这些情况根本不包含值为“information from:”的appl:p
,那么使用cts:element单词查询
可能会有很大帮助
使用元素词查询
不一定需要索引
HTH!我不确定未筛选的在这个查询中有多大帮助:大部分时间可能会花在cts:contains
表达式上。一般来说,内置的筛选速度非常快
无论如何,我要尝试的第一件事是添加一个cts:element单词查询(xs:QName('appl:p'),“informationfrom”)
到并在$p
处查询。但是也要保留cts:contains
表达式。这样,索引查找可以在任何appl:p
元素中检查“information from”,这应该会删除一些文档。然后cts:contains
应该需要做的工作更少。您可以通过重放来帮助它如果内容结构允许,将“//appl:block”步骤设置为完整路径。如果只有一个last-p,您也可以编写表达式,以便它在找到第一个后可以停止。我不确定未筛选的在这个查询中有多大帮助:大部分时间可能会花在cts:contains
中一般来说,内置的过滤速度非常快
无论如何,我要尝试的第一件事是添加一个cts:element单词查询(xs:QName('appl:p'),“informationfrom”)
到并在$p
处查询。但是也要保留cts:contains
表达式。这样,索引查找可以在任何appl:p
元素中检查“information from”,这应该会删除一些文档。然后cts:contains
应该需要做的工作更少。您可以通过重放来帮助它如果内容结构允许,请使用完整路径标记“//appl:block”步骤。如果只有一个last-p,您也可以编写表达式,以便它在找到第一个后可以停止。您还可以在摄取时标记最后一个(例如,使其成为…
)因此,您可以利用索引来避免where子句。您还可以在摄取时标记最后一个索引(例如,使其…
)因此,您可以利用索引来避免使用where子句。谢谢,关于索引,您是对的,我的意思是,可能没有说得太清楚,MarkLogic admin中似乎有一个特定的设置,允许您打开或关闭标点符号的索引,由于目前空间的限制,我们将其关闭。如果我可以d搜索确切的短语“信息来源:”(包括冒号),我会有更好的结果。不过感谢您的回复!@zrdunlap没有用于索引的特定标点设置。这确实会有所不同。如果您搜索“精确”匹配,单词索引会提供粗略的结果,需要检查/过滤以消除误报。但这是自动完成的,“只”需要一点时间性能..也许我们走错了方向,当你说搜索“精确”匹配时,你是什么意思?我试图使用cts:contains来实现这一点,因为在一个受控测试中,我可以确认使用cts:element-word查询(xs:QName(“appl:p”),“information-from:”)返回的结果带有“information-from”"不带冒号。@zrdunlap您可以将查询选项作为第三个参数传递给cts:element qord查询。添加第三个参数“exact”就足够了。谢谢您的帮助,我会报告所有成功的情况谢谢,您对索引的看法是对的,我的意思可能不是很清楚,因为Mark中似乎有一个特定的设置允许您打开或关闭标点符号索引的逻辑管理员,目前由于空间限制,我们已将其关闭,我会有更好的结果。不过感谢您的回复!@zrdunlap没有用于索引的特定标点设置。这确实会有所不同。如果您搜索“精确”匹配,单词索引会提供粗略的结果,需要检查/过滤以消除误报。但这是自动完成的,“只”需要一点时间性能..也许我们走错了方向,当你说搜索“精确”匹配时,你的意思是什么?我想