cts:word 中的数字在 Marklogic 中查询
Numbers in cts:word query in Marklogic
我有一个 cts:word-query,它以数字作为文本值。
cts:search(fn:doc(),cts:word-query("226"))
此查询将获取与文档中仅 226 个匹配的结果。但我还需要获取包含 0026 的文件。
示例:
这是abc.xml
<a>
<b>00226</b>
</a>
这是abc1.xml
<a>
<b>226</b>
</a>
如果我将查询作为 cts:search(fn:doc(),cts:word-query("226"))
,它只会获取 abc1.xml,如果查询是 cts:search(fn:doc(),cts:word-query("00226"))
,它只会获取 abc.xml.
但我需要同时获取这两个文件,而不考虑前导零。
您可以在数据库中标量类型int
或long
的元素<b>
上添加一个元素范围索引,然后您执行以下查询,它应该return 两个文档:
let $query := cts:element-range-query(xs:QName("b"),"=",00226)
return cts:search(fn:doc(),$query)
最简单的方法是使用通配符 (*) 并添加 wildcarded
选项
cts:search(fn:doc(),cts:word-query("*226", ('wildcarded')))
编辑:
虽然这匹配示例文档,正如 Kishan 在评论中指出的那样,通配符也匹配不需要的文档(例如包含“226226”)。
由于范围索引在这种情况下不是一个选项,因为数据是混合的,这里是一个替代 hack:
cts:search(
fn:doc(),
cts:word-query(
for $lead in ('', '0', '00', '000')
return $lead || "226"))
显然,这取决于可以有多少个前导零,并且只有在已知且有限的情况下才会起作用。
我有一个 cts:word-query,它以数字作为文本值。
cts:search(fn:doc(),cts:word-query("226"))
此查询将获取与文档中仅 226 个匹配的结果。但我还需要获取包含 0026 的文件。
示例: 这是abc.xml
<a>
<b>00226</b>
</a>
这是abc1.xml
<a>
<b>226</b>
</a>
如果我将查询作为 cts:search(fn:doc(),cts:word-query("226"))
,它只会获取 abc1.xml,如果查询是 cts:search(fn:doc(),cts:word-query("00226"))
,它只会获取 abc.xml.
但我需要同时获取这两个文件,而不考虑前导零。
您可以在数据库中标量类型int
或long
的元素<b>
上添加一个元素范围索引,然后您执行以下查询,它应该return 两个文档:
let $query := cts:element-range-query(xs:QName("b"),"=",00226)
return cts:search(fn:doc(),$query)
最简单的方法是使用通配符 (*) 并添加 wildcarded
选项
cts:search(fn:doc(),cts:word-query("*226", ('wildcarded')))
编辑:
虽然这匹配示例文档,正如 Kishan 在评论中指出的那样,通配符也匹配不需要的文档(例如包含“226226”)。
由于范围索引在这种情况下不是一个选项,因为数据是混合的,这里是一个替代 hack:
cts:search(
fn:doc(),
cts:word-query(
for $lead in ('', '0', '00', '000')
return $lead || "226"))
显然,这取决于可以有多少个前导零,并且只有在已知且有限的情况下才会起作用。