2

鉴于此查询:

for $d in cts:search(
      fn:doc(),
      cts:and-query(
       (            
         cts:collection-query(('InProgress_Audit'))
       )
      ))          
      where not(fn:contains($d//TitleDate/text(),"Z"))
      return <p>{document-uri($d)}</p>

如何将“where”约束移动到 CTS 搜索查询中?

4

1 回答 1

3

这用于cts:query应用您的约束:

for $d in cts:search(
  fn:doc(),
  cts:and-not-query(            
     cts:collection-query('InProgress_Audit'),
     cts:element-query(xs:QName('TitleDate'),
       cts:word-query('*Z*', 'wildcarded'))
  ))
return <p>{document-uri($d)}</p>

有索引选项可以加快通配符搜索。您还可以将范围索引TitleDate与 a 结合使用以cts:element-range-index-query进一步加快速度。

更新:正如@mblakele 在评论中指出的那样,cts:element-value-query可能比嵌套的cts:element-query/更快cts:word-query

cts:element-value-query(xs:QName('TitleDate'), '*Z*', 'wildcarded')

并且使用 cts:uris 将比多次重复调用document-uri(). 但是,您需要在设置中启用 URI 词典选项。将所有这些放在一起,查询将如下所示:

cts:uris((), 'document',
  cts:and-not-query((            
     cts:collection-query('InProgress_Audit'),
     cts:element-value-query(xs:QName('TitleDate'), 
       '*Z*', 'wildcarded')
  ))) ! element p { . }
于 2013-07-22T20:57:45.033 回答