Как сопоставить пространство в MarkLogic с помощью функций CTS?
Мне нужно искать те элементы, у которых есть место " "
в их атрибутах.
Например:
<unit href="http:xxxx/unit/2 ">
Предположим, что в приведенном выше коде есть место в последнем атрибуте href.
Я сделал это с помощью FLOWER
запрос. Но мне нужно, чтобы это было сделано с помощью функций CTS. Пожалуйста, предложите.
За FLOWER
запрос я пробовал это:
let $x := (
for $d in doc()
order by $d//id
return
for $attribute in data($d//@href)
return
if (fn:contains($attribute," ")) then
<td>{(concat( "id = " , $d//id) ,", data =", $attribute)}</td>
else ()
)
return <tr>{$x}</tr>
Это работает нормально.
За CTS
я пытался
let $query :=
cts:element-attribute-value-query(xs:QName("methodology"),
xs:QName("href"),
xs:string(" "),
"wildcarded")
let $search := cts:search(doc(), $query)
return fn:count($search)
1 ответ
Ваш запрос ищет, чтобы " " являлось полнотой значения атрибута. Если вы хотите искать атрибуты, содержащие пробел, вам нужно использовать подстановочные знаки. Однако, поскольку нет индексации пробелов, за исключением запросов с точными значениями (которые по определению не являются символами подстановки), вы не собираетесь получать большую поддержку индекса для этого запроса, поэтому вам нужно будет выполнить это как отфильтрованный поиск. (что у вас есть в вашем коде выше) с большим количеством ложных срабатываний.
Возможно, лучше создать индекс диапазона строк для атрибута и выполнить сопоставление значений для него.