cts中的数字:Marklogic中的单词查询

Kis*_*hra 3 xquery marklogic

我有一个cts:word-query,它以数字作为文本值. cts:search(fn:doc(),cts:word-query("226"))

此查询将获取文档中仅匹配226的结果.但我还需要获取包含0026的文档.

示例:这是abc.xml

<a>
<b>00226</b>
</a>
Run Code Online (Sandbox Code Playgroud)

这是abc1.xml

<a>
<b>226</b>
</a>
Run Code Online (Sandbox Code Playgroud)

如果我给出查询cts:search(fn:doc(),cts:word-query("226")),它将只获取abc1.xml,如果查询是cts:search(fn:doc(),cts:word-query("00226")),它将只获取abc.xml.

但是我需要获得两个文件,而不管前导零.

chr*_*lly 6

最简单的方法是使用通配符(*)并添加wildcarded选项

cts:search(fn:doc(),cts:word-query("*226", ('wildcarded')))
Run Code Online (Sandbox Code Playgroud)

编辑:

虽然这与示例文档相匹配,正如Kishan在评论中指出的那样,通配符也匹配不需要的文档(例如包含"226226").

由于范围索引在这种情况下不是一个选项,因为数据是混合的,这里是另一种方法:

cts:search(
    fn:doc(),
    cts:word-query(
        for $lead in ('', '0', '00', '000') 
        return $lead || "226"))
Run Code Online (Sandbox Code Playgroud)

显然,这取决于可以存在多少前导零,并且只有在已知和有限的情况下才会起作用.