(замененный ответ)
Похоже, вы столкнулись с неудачной ошибкой, которая, похоже, применима ко всем cts:field-*-query
конструкторам запросов, но не ко всем остальным (не проверено полностью).
Встроенные функции испытывают трудности, связанные с контекстом, из которого они вызываются, а также со своими собственными, что объясняет потенциальные ссылки на неправильную базу данных.Это может быть сложно применить к правильному контексту.Я подал отчет об ошибке, так что, надеюсь, это скоро будет решено в одном из следующих выпусков патча.
Тем временем, лучше всего принудительно заставить конструктор запросов переоцениваться во внутреннем контексте.Это можно сделать, сериализовав запрос в XML и проанализировав его внутри встроенной функции.Это довольно легко сделать.Оберните конструктор document { .. }/*
, и для его анализа вы используете cts:query($query)
:
let $text := 'The Point'
let $query := document{
cts:field-word-query("publication-titles", $text,
("punctuation-sensitive", "case-insensitive", "whitespace-sensitive"), 5.0)
}/*
return
xdmp:invoke-function(function()
{
cts:search(/Publication, cts:query($query))[1]
},
<options xmlns="xdmp:eval">
<database>{xdmp:database("ABC")}</database>
</options>
)
Сериализация и синтаксический анализ очень малы, но, вероятно, незначительны по сравнению с фактическим временем поиска..
HTH!